我需要一点家庭作业的帮助。我必须编写一个函数,将多个词典组合成新词典。如果一个键出现了不止一次;对应于新字典中该键的值应该是唯一的列表。作为一个例子,这就是我目前所拥有的:
f = {'a': 'apple', 'c': 'cat', 'b': 'bat', 'd': 'dog'}
g = {'c': 'car', 'b': 'bat', 'e': 'elephant'}
h = {'b': 'boy', 'd': 'deer'}
r = {'a': 'adam'}
def merge(*d):
newdicts={}
for dict in d:
for k in dict.items():
if k[0] in newdicts:
newdicts[k[0]].append(k[1])
else:
newdicts[k[0]]=[k[1]]
return newdicts
combined = merge(f, g, h, r)
print(combined)
输出如下:
{'a':['apple','adam','c':['cat','car','b':['bat','bat','boy','e':['elephant','d':['dog','deer']}
在“b”键下,“bat”出现两次。如何删除重复项?
我在filter下面查过了,lambda,但是我不知道如何使用(也许b/c是字典里的一个列表?)
任何帮助都将不胜感激。提前感谢你的帮助!
在for循环中添加以下内容:
这确保不会添加重复项
在添加之前,只需测试列表中的元素:
因为您只需要
value
列表中的唯一元素,所以可以使用Set
作为值。另外,您可以在这里使用defaultdict
,这样您就不必在添加之前测试密钥是否存在。另外,不要使用内置变量名。而不是其他变量。
因此,可以将
merge
方法修改为:注意,结果是一个集合,而不是一个列表——这样计算效率更高。如果您希望最终表单是列表,则可以执行以下操作:
{'a':['apple','adam','c':['car','cat','b':['boy','bat','e':['elephant','d':['deer','dog']}
相关问题 更多 >
编程相关推荐