首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于许多属性的循环内联的命名元组

用于许多属性的循环内联的命名元组
EN

Stack Overflow用户
提问于 2018-08-29 17:16:05
回答 2查看 142关注 0票数 1

我想创建一个有30个条目的命名元组,为了使代码更简短,我想这样做:

代码语言:javascript
复制
from collections import namedtuple
header_dict = {0: "id",
               1: "PR_DISPLAY_NAME",
               2: "PR_HOME_ADDRESS_STREET",
               3: "PR_ZIP",
               ...
               29: "PR_SURNAME",
               }

Person = namedtuple('Person', '{} {} {}'.format(header_dict[0], header_dict[1], header_dict[2]))

s = '{} ' * 30
Person = namedtuple('Person', s.format(header_dict[(i for i in range(30)]))

第一个"Person = ...“指令可以工作,但第二个指令的结果是:

代码语言:javascript
复制
KeyError: <generator object <genexpr> at 0x7fc2a1cff240>

我使用的是Python 3.4.2

代码应该是什么样子的,或者有没有更好的方法来创建这个命名元组?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-29 17:20:26

您可以使用值

代码语言:javascript
复制
In [1]: header_dict = {0: "id",
   ...:                1: "PR_DISPLAY_NAME",
   ...:                2: "PR_HOME_ADDRESS_STREET",
   ...:                3: "PR_ZIP",
   ...:                29: "PR_SURNAME",
   ...:                }
   ...:                

In [2]: s = '{} ' * len(header_dict)

In [3]: s.format(*header_dict.values())
Out[3]: 'id PR_DISPLAY_NAME PR_HOME_ADDRESS_STREET PR_ZIP PR_SURNAME '

你的代码将会:

代码语言:javascript
复制
Person = namedtuple('Person',s.format(*header_dict.values()))
票数 1
EN

Stack Overflow用户

发布于 2018-08-29 17:21:47

您可以执行类似以下内容的操作

代码语言:javascript
复制
Person = namedtuple('Person', s.format(*(header_dict[i] for i in range(30))))

从python 3.6开始,python dict保留了插入顺序。因此,从python3.6开始,您可以

代码语言:javascript
复制
Person = namedtuple('Person', ' '.join(header_dict.values()))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52073784

复制
相关文章

相似问题

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