小编典典

字典Python中重复键的值列表

python

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

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

然后下一个字典也一样

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()),我会得到-

[('a', [10])]
[('a', [10]), ('b', [3])]
[('a', [10]), ('c', [0]), ('b', [3])]

再次对每个字典重复此操作。我如何获得1个字典,其中包含所有键,值-

{'a':[10,0,..], 'b':[4, 3, 4,..], etc.} ?

我还应该补充一点,我的字典是for循环的结果,而不是单独存储在唯一变量中。


阅读 218

收藏
2021-01-20

共1个答案

小编典典

如果我正确理解您的态度,则您正在尝试合并各种字典。使用内置插件的方法之一(我相信,很快会有人给你一个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)

(为了清楚起见,非常详细)

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

print ( [ (v, k) for k, v in merged.items () ] )

这样产生:

[([10, 7, 4], 'a'), ([2, 4, 3], 'c'), ([0, 4, 5], 'b')]
2021-01-20