目的:
第一个数字:第二个数字的键
第二个数字:值是第一个数字,但键是第三个数字
第三个数字:第二个数字的值

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]}

输出不是我想要的。如上所述,我希望第一个数字是第二个数字的键,而第二个数字是第三个数字的键。我将如何去做?

谢谢!

最佳答案

您解开列表,然后使用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]

09-11 20:19