目标:
第一个号码:第二个号码的键
第二个数字:第一个数字的值,第三个数字的键
第三个号码:值到第二个号码
def make_dictionary_list(old_list):
return {key: values for key, *values in old_list}输入:
[(4157, 1, 1), (4157, 1, 10), (4157, 2, 1), (4157, 2, 10), (4157, 3, 1), (4157, 3, 10), (4157, 4, 1), (4157, 4, 10), (4182, 1, 1)]
输出:
{4157: [4, 10], 4182: [1, 1]}
输出不是我想要的。如前所述,我希望第一个号码是第二个号码的钥匙,第二个号码是第三个号码的钥匙。我该怎么做?
谢谢!
发布于 2018-09-15 08:42:51
您可以打开列表,并使用dict.setdefault()将其放入字典:
data = [(4157, 1, 1), (4157, 1, 10), (4157, 2, 1), (4157, 2, 10), (4157, 3, 1),
(4157, 3, 10), (4157, 4, 1), (4157, 4, 10), (4182, 1, 1)]
d = {}
for k,v,p in data:
key = d.setdefault(k,{})
key[v]=p
print(d)输出:
{4157: {1: 10, 2: 10, 3: 10, 4: 10}, 4182: {1: 1}}你可以通过:
print( d[4157][3] ) # 10结果比源数据短,因为将第一个值替换为第二个值:
(4157, 1, 1) => (4157, 1, 10) # 10 replaces 1
(4157, 2, 1) => (4157, 2, 10) # etc.
(4157, 3, 1) => (4157, 3, 10)
(4157, 4, 1) => (4157, 4, 10) 相反,您可以像这样聚合它们:
for k,v,p in data:
key = d.setdefault(k,{})
key2 = key.setdefault(v,[])
key2.append(p)
print(d)若要获得以下输出:
{4157: {1: [1, 10], 2: [1, 10], 3: [1, 10], 4: [1, 10]}, 4182: {1: [1]}}并通过
print( d[4157][3] ) # [1, 10]https://stackoverflow.com/questions/52343065
复制相似问题