如果在这里已经探讨了这个问题,请提前道歉-我在这里查看了不同的答案,但找不到我需要的东西。
我的目标是创建像这样的字典- {'a':[10, 9, 10, 10], 'b':[10, 9, 1, 0], 'c':[0, 5, 0, 1], and so on}
{'a':[10, 9, 10, 10], 'b':[10, 9, 1, 0], 'c':[0, 5, 0, 1], and so on}
我所拥有的是多个字典,它们具有重复的键(每隔一个字典中的键都相同),就像这样 {'a':10, 'b': 0, 'c': 2} {'a':7, 'b': 4, 'c': 4} {'a':4, 'b': 5, 'c': 3}
{'a':10, 'b': 0, 'c': 2}
{'a':7, 'b': 4, 'c': 4}
{'a':4, 'b': 5, 'c': 3}
我无法知道此类字典的数量,也无法知道其中的键是否连续到’f’或’g’,但是我知道这些键是重复的 。我已经尝试过,defaultdict但是得到的是-
defaultdict
defaultdict(<type 'list'>, {'a': [10]}) defaultdict(<type 'list'>, {'a': [10], 'b': [3]}) defaultdict(<type 'list'>, {'a': [10], 'b': [3], 'c': [0]})
然后下一个字典也一样
defaultdict(<type 'list'>, {'a': [4]}) defaultdict(<type 'list'>, {'a': [4], 'b': [5]}) defaultdict(<type 'list'>, {'a': [4], 'b': [5], 'c': [1]})
我上面输出的代码是-
d = collections.defaultdict(list) for k, v in z.iteritems(): d[k].append(v) c = d.items() print d
如果我print c改为(打印d.items()),我会得到-
print c
d.items()
[('a', [10])] [('a', [10]), ('b', [3])] [('a', [10]), ('c', [0]), ('b', [3])]
再次对每个字典重复此操作。我如何获得1个字典,其中包含所有键,值-
{'a':[10,0,..], 'b':[4, 3, 4,..], etc.} ?
我还应该补充一点,我的字典是for循环的结果,而不是单独存储在唯一变量中。
如果我正确理解您的态度,则您正在尝试合并各种字典。使用内置插件的方法之一(我相信,很快会有人给你一个numpy和collections答案)看起来是这样的:
numpy
collections
ds = [ {'a':10, 'b': 0, 'c': 2}, {'a':7, 'b': 4, 'c': 4}, {'a':4, 'b': 5, 'c': 3} ] merged = {} for d in ds: for k, v in d.items (): if k not in merged: merged [k] = [] merged [k].append (v) print (merged)
(为了清楚起见,非常详细)
编辑: 阅读了说明“我想要的结果是值/键的列表”的评论后,可以在生成的合并字典上使用它:
print ( [ (v, k) for k, v in merged.items () ] )
这样产生:
[([10, 7, 4], 'a'), ([2, 4, 3], 'c'), ([0, 4, 5], 'b')]