Python列表到字典 - 没有值覆盖

Posted

技术标签:

【中文标题】Python列表到字典 - 没有值覆盖【英文标题】:Python List To Dictionary - Without Value Overwrite 【发布时间】:2015-05-03 09:09:54 【问题描述】:
Keys = [1,2,3]
Values = [["a",1],["b",2],["c",3],["d",1]]

Dictionary = dict.fromkeys(Keys)  

for d in Dictionary:
    for value in Values:
        if value[1] == d:
            # Add to dictionary
            Dictionary.update(d:value)
        # else
            # Do Nothing

print(Dictionary)

当我运行这段代码时,它运行良好,直到我仔细查看它的输出。我注意到因为我想将两个“值”添加到“键”1,它会覆盖添加的第一个并保留最后一个,这是输出:

1: ['d', 1], 2: ['b', 2], 3: ['c', 3]

我希望键 1 的值同时为 ['a',1]['d',1]

【问题讨论】:

那么:1: [['a', 1], ['d', 1]], ... 那么? 是的,这就是我想要的 for 循环 字典键是唯一的...所以没有... 对不起,我让自己感到困惑,是的,就像您首先放置的 for 循环的输出一样 【参考方案1】:

使用defaultdict 对象。

# -*- coding: utf-8 -*-
from collections import defaultdict

values = [["a", 1], ["b", 2], ["c", 3], ["d", 1]]
d = defaultdict(list)
for x, y in values:
    d[y].append([x, y])

然后你可以像普通的dict对象一样访问键和值。

for k, v in d.iteritems():
    print " ".format(k,v)

哪些输出

1 [['a', 1], ['d', 1]]
2 [['b', 2]]
3 [['c', 3]]

【讨论】:

请注意:这是为每个项目创建一个新列表,而不是引用 Values 中的原始列表。为此,请保持列表打包并使用索引 0 作为键。【参考方案2】:

为单个键设置多个值的唯一方法是将它们包装在另一个容器中,通常是一个列表。你可以这样做:

from collections import defaultdict

keys = [1,2,3]
values = [["a",1],["b",2],["c",3],["d",1]]

mydict = defaultdict(list)
for key in keys:
   mydict[key].extend(value for value in values if value[1] == key)

【讨论】:

【参考方案3】:

类似这样,你的意思是:

my_dict = i:[] for i in Keys

for a, b in Values:
    my_dict[b].append([a, b])

【讨论】:

以上是关于Python列表到字典 - 没有值覆盖的主要内容,如果未能解决你的问题,请参考以下文章

python 列表中的Update()函数

python中 列表导入到字典 出现相同的键,如何将值相加

Python:字典

python根据键值过滤字典列表

将字典列表中的值映射到 Python 中的字符串

python基础 ()bool值 列表 元组 字典 浮点数)