21番茄网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 21番茄网
查看: 605|回复: 1

字典合并

[复制链接]

693

主题

911

帖子

2993

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2993
发表于 2021-1-20 16:08:22 | 显示全部楼层 |阅读模式
字典合并

情况一:
x={‘a’:’1,2,3’, ‘b’:’2,3,4’}
需要合并为:
x={‘c’:’1,2,3,4’}

需要做到三件事:
1. 将字符串转化为数值列表
2. 合并两个列表并添加新的键值
3. 去除重复元素

第1步通过常用的函数eval()就可以做到了,第2步需要添加一个键值并添加元素,第3步利用set集合的性质可以达到去重的效果,不过最后需要再将set集合转化为list列表。
这里需要利用python列表中最后一个元素后面允许跟一个逗号的性质,按如下方法处理即可。
代码如下:

x={'a':'1,2,3','b':''}
x['c']=list(set(eval(x['a']+','+x['b'])))
del x['a']
del x['b']
print x

其他详见:https://blog.csdn.net/wr339988/article/details/53390762

字典合并  Python基础语法 1
                               
登录/注册后可看大图


情况二:
dict1={1:[1,11,111],2:[2,22,222]}
dict2={3:[3,33,333],4:[4,44,444]}
合并两个字典得到类似

{1:[1,11,111],2:[2,22,222],3:[3,33,333],4:[4,44,444]}

方法:
dictMerged2=dict(dict1, **dict2)

等同于:
dictMerged=dict1.copy()
dictMerged.update(dict2)

或者

dictMerged=dict(dict1)
dictMerged.update(dict2)

其他详见:https://www.cnblogs.com/dkblog/archive/2012/02/02/2336089.html

字典合并  Python基础语法 1
                               
登录/注册后可看大图


情况三
list1 = ['张三', '李四', '王五', '老二']
list2 = ['张三', '李四', '老二', '王七']

a = [x for x in list1 if x in list2] #两个列表表都存在
b = [y for y in (list1 + list2) if y not in a] #两个列表中的不同元素

print('a的值为:',a)
print('b的值为:',b)

c = [x for x in list1 if x not in list2]  #在list1列表中而不在list2列表中
d = [y for y in list2 if y not in list1]  #在list2列表中而不在list1列表中
print('c的值为:',c)
print('d的值为:',d)

输出为:
a的值为: ['张三', '李四', '老二']
b的值为: ['王五', '王七']
c的值为: ['王五']
d的值为: ['王七']

情况三的解决方法推导式,详见:







上一篇:判断一个元素是否在列表中的方法
下一篇:python推导式
回复

使用道具 举报

693

主题

911

帖子

2993

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2993
 楼主| 发表于 2021-1-20 16:59:38 | 显示全部楼层
情况四:

两个字典A = {'a': 1, 'b': 2, 'c': 3}, B = {'b': 4, 'c': 6, 'd': 8} 要合并这两个字典,键值同则相加。

两个字典如果不考虑键相同则相加的话,可以使用d1.update(d2)可以很方便合并,但这样的后面的字典到中的值会覆盖字典d1中的值。
A = {'a': 1, 'b': 2}
B = {'a': 8, 'c': 3}
A.update(B)
print(A)

运行结果:{'a': 8, 'b': 2, 'c': 3}

  Python基础语法 line2
                               
登录/注册后可看大图


如果要考虑两个字典,如果考虑键同则值相加的问题,可以使用下面的几种方法:

方法一:
A = {'a': 1, 'b': 2, 'c': 3}
B = {'b': 4, 'c': 6, 'd': 8}
for key,value in B.items():
if key in A:
    A[key] += value
else:
    A[key] = value
print(dict(sorted(A.items(), key=lambda d:d[1])))

运行结果:{'a': 1, 'b': 6, 'd': 8, 'c': 9}

  Python基础语法 line4
                               
登录/注册后可看大图


方法二:
A = {'a': 1, 'b': 2, 'c': 3}
B = {'b': 4, 'c': 6, 'd': 8}
C = {}
for key in list(set(A) | set(B)):
if A.get(key) and B.get(key):
    C.update({key: A.get(key) + B.get(key)})
else:
    C.update({key: A.get(key) or B.get(key)})
print(C)
{'c': 9, 'd': 8, 'a': 1, 'b': 6}

  Python基础语法 line4
                               
登录/注册后可看大图


方法三:
A = {'a': 1, 'b': 2, 'c': 3}
B = {'b': 4, 'c': 6, 'd': 8}
def dict_union(d1, d2):
    keys = d1.keys() | d2.keys()
    temp = {}
    for key in keys:
        temp[key] = sum([d.get(key,0) for d in (d1, d2)])
    return temp
C = dict_union(A, B)
print(C)
{'d': 8, 'a': 1, 'b': 6, 'c': 9}

  Python基础语法 line4
                               
登录/注册后可看大图


方法四:
A = {'a': 1, 'b': 2, 'c': 3}
B = {'b': 4, 'c': 6, 'd': 8}
C = {}
for key1 in A:
    for key2 in B:
        if key1 in B:
            C[key1] = A[key1] + B[key1]
        else:
            C[key1] = A[key1]
            if key2 not in A:
                C[key2] = B[key2]
print(C)
{'a': 1, 'd': 8, 'b': 6, 'c': 9}

  Python基础语法 line4
                               
登录/注册后可看大图


方法五:
A = {'a': 1, 'b': 2, 'c': 3}
B = {'b': 4, 'c': 6, 'd': 8}
C = {}
for key in A:
    if B.get(key):
        C[key] = A[key] + B[key]
    else:
        C[key] = A[key]
for key in B:
    if not A.get(key):
        C[key] = B[key]
print(C)
{'a': 1, 'b': 6, 'c': 9, 'd': 8}

  Python基础语法 line2
                               
登录/注册后可看大图


来自:https://www.jb51.net/article/157352.htm


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|21番茄网 ( 粤ICP备10099428号 ) 奇远富

GMT+8, 2024-9-19 09:44 , Processed in 0.608676 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表