Python 列表到字典 - 没有值覆盖
Python List To Dictionary - Without Value Overwrite
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)
当我 运行 这段代码时,它工作正常,直到我仔细观察它的输出。我注意到因为我想添加两个 'values' 到 'Key' 1,它会覆盖添加的第一个并留下最后一个,这里是输出:
{1: ['d', 1], 2: ['b', 2], 3: ['c', 3]}
我希望键 1 的值同时为 ['a',1]
和 ['d',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])
然后您就可以像访问普通字典对象一样访问键和值。
for k, v in d.iteritems():
print "{} {}".format(k,v)
输出
1 [['a', 1], ['d', 1]]
2 [['b', 2]]
3 [['c', 3]]
单个键具有多个值的唯一方法是将它们包装在另一个容器中,通常是一个列表。你可以这样做:
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)
类似这样的东西,你的意思是:
my_dict = {i:[] for i in Keys}
for a, b in Values:
my_dict[b].append([a, b])
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)
当我 运行 这段代码时,它工作正常,直到我仔细观察它的输出。我注意到因为我想添加两个 'values' 到 'Key' 1,它会覆盖添加的第一个并留下最后一个,这里是输出:
{1: ['d', 1], 2: ['b', 2], 3: ['c', 3]}
我希望键 1 的值同时为 ['a',1]
和 ['d',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])
然后您就可以像访问普通字典对象一样访问键和值。
for k, v in d.iteritems():
print "{} {}".format(k,v)
输出
1 [['a', 1], ['d', 1]]
2 [['b', 2]]
3 [['c', 3]]
单个键具有多个值的唯一方法是将它们包装在另一个容器中,通常是一个列表。你可以这样做:
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)
类似这样的东西,你的意思是:
my_dict = {i:[] for i in Keys}
for a, b in Values:
my_dict[b].append([a, b])