字典Python中重复键的值列表

ask*_*nce 1 python dictionary key duplicates defaultdict

如果这个问题已经在这里探讨过,请提前道歉 - 我在这里看了不同的答案,却找不到我需要的东西.

我的目标是创建一个这样的字典 - {'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}

我无法知道这些字典的数量,或者是否有密钥继续到'f',或者其中有'g',但我知道密钥是重复的.我试过defaultdict但我得到的是 -

defaultdict(<type 'list'>, {'a': [10]})
defaultdict(<type 'list'>, {'a': [10], 'b': [3]})
defaultdict(<type 'list'>, {'a': [10], 'b': [3], 'c': [0]})
Run Code Online (Sandbox Code Playgroud)

然后为下一个字典做同样的事情 -

defaultdict(<type 'list'>, {'a': [4]})
defaultdict(<type 'list'>, {'a': [4], 'b': [5]})
defaultdict(<type 'list'>, {'a': [4], 'b': [5], 'c': [1]})
Run Code Online (Sandbox Code Playgroud)

我对上面输出的代码是 -

d = collections.defaultdict(list)
    for k, v in z.iteritems():
        d[k].append(v)
        c = d.items()
        print d
Run Code Online (Sandbox Code Playgroud)

如果我print c改为(打印d.items())我得到 -

[('a', [10])]
[('a', [10]), ('b', [3])]
[('a', [10]), ('c', [0]), ('b', [3])]
Run Code Online (Sandbox Code Playgroud)

每个字典再次重复.如何获得1个dict,包含所有键,值 -

{'a':[10,0,..], 'b':[4, 3, 4,..], etc.} ?
Run Code Online (Sandbox Code Playgroud)

我还应该补充一点,我所拥有的dicts是for循环的结果,而不是单独存储在一个唯一变量中.

Hyp*_*eus 6

如果我正确理解您的注意事项,那么您正在尝试合并各种词典.使用内置插件(我相信,很快会有人给你一个方法numpycollections答案)看起来是这样的:

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)
Run Code Online (Sandbox Code Playgroud)

(为了清晰起见,相当冗长)

编辑: 在阅读了你的评论,说明"我想要的结果是一个值/键的列表.",你可以在生成的合并字典上使用它:

print ( [ (v, k) for k, v in merged.items () ] )
Run Code Online (Sandbox Code Playgroud)

这会产生:

[([10, 7, 4], 'a'), ([2, 4, 3], 'c'), ([0, 4, 5], 'b')]
Run Code Online (Sandbox Code Playgroud)