Python 创建具有两个或多个属性的列表

Python 创建具有两个或多个属性的列表,python,list-comprehension,Python,List Comprehension,假设我有这本字典,我想要一份姓名和身份证的清单 d=[{'name':'testtt',id:1,'stuff':123},{'name':'test',id:2,'stuff',123}] 我可以做到: items = [] for item in d: items.append(d['name']) items.append(d['id']) 可以在同一个列表中完成吗 大概是这样的: items=[item['name'],item['id']用于d中的item]这里有一

假设我有这本字典,我想要一份姓名和身份证的清单

d=[{'name':'testtt',id:1,'stuff':123},{'name':'test',id:2,'stuff',123
}]

我可以做到:

items = []

for item in d:
    items.append(d['name'])
    items.append(d['id'])
可以在同一个列表中完成吗

大概是这样的:


items=[item['name'],item['id']用于d中的item
]

这里有一种方法,使用嵌套循环从每个dict字段添加项:

items = [x for dct in d for x in (dct['name'], dct['id'])]

下面是一种使用嵌套循环从每个dict字段添加项目的方法:

items = [x for dct in d for x in (dct['name'], dct['id'])]

您可以使用
itertools

d = [{'name': 'testtt', 'id': 1, 'stuff': 123}, {'name': 'test', 'id': 2, 'stuff':123}]
from itertools import chain
new_d  = list(chain.from_iterable([(i["name"], i["id"]) for i in d]))
输出:

['testtt', 1, 'test', 2]

您可以使用
itertools

d = [{'name': 'testtt', 'id': 1, 'stuff': 123}, {'name': 'test', 'id': 2, 'stuff':123}]
from itertools import chain
new_d  = list(chain.from_iterable([(i["name"], i["id"]) for i in d]))
输出:

['testtt', 1, 'test', 2]

注意必须将id更改为字符串,否则它会引用内置的id函数。你可以这样做

d = [{'name': 'testtt', 'id': 1, 'stuff': 123}, {'name': 'test', 'id': 2, 'stuff': 123}]

items = map(lambda x: (x['name'], x['id']), d)


>>> items
[('testtt', 1), ('test', 2)]

注意必须将id更改为字符串,否则它会引用内置的id函数。你可以这样做

d = [{'name': 'testtt', 'id': 1, 'stuff': 123}, {'name': 'test', 'id': 2, 'stuff': 123}]

items = map(lambda x: (x['name'], x['id']), d)


>>> items
[('testtt', 1), ('test', 2)]

你可以这么做是的。。。。如果
是一个由2个列表或2个元组组成的列表来保持结构,不是更有意义吗?(或者这就是你想要做的-因为你只需要在项目周围
()
[]
来做)它看起来很奇怪,但它很有意义,因为我用它来创建一个包含术语的大数组,然后我可以在前端应用一些搜索逻辑,这就是为什么我不需要保留结构。你可以这样做是的。。。。如果
是一个由2个列表或2个元组组成的列表来保持结构,不是更有意义吗?(或者这就是你想要做的——因为你只需要在项目周围使用
()
[]
就可以做到这一点)它看起来很奇怪,但它很有意义,因为我用它来创建一个大数组,其中包含一些术语,然后我可以在前端应用一些搜索逻辑,这就是为什么我不需要保留结构的原因