首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何将大小为3的元组列表成键值对?

我如何将大小为3的元组列表成键值对?
EN

Stack Overflow用户
提问于 2018-09-15 08:33:51
回答 1查看 37关注 0票数 1

目标:

第一个号码:第二个号码的键

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

第三个号码:值到第二个号码

代码语言:javascript
复制
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]}

输出不是我想要的。如前所述,我希望第一个号码是第二个号码的钥匙,第二个号码是第三个号码的钥匙。我该怎么做?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-15 08:42:51

您可以打开列表,并使用dict.setdefault()将其放入字典:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
{4157: {1: 10, 2: 10, 3: 10, 4: 10}, 4182: {1: 1}}

你可以通过:

代码语言:javascript
复制
print( d[4157][3] ) # 10

结果比源数据短,因为将第一个值替换为第二个值:

代码语言:javascript
复制
(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) 

相反,您可以像这样聚合它们:

代码语言:javascript
复制
for k,v,p in data:
    key = d.setdefault(k,{})
    key2 = key.setdefault(v,[])
    key2.append(p)

print(d)

若要获得以下输出:

代码语言:javascript
复制
{4157: {1: [1, 10], 2: [1, 10], 3: [1, 10], 4: [1, 10]}, 4182: {1: [1]}}

并通过

代码语言:javascript
复制
print( d[4157][3] ) # [1, 10]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52343065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档