我有一个字典列表。对于每个字典,我需要将其属性之一传递给函数,然后根据该函数的结果分配一个新属性。
例如: 我有一个网站的页面列表。我需要循环遍历它们,并根据 URL 将作者姓名分配给字典中的属性。
for index, page in enumerate(pages):
pages[index]['author'] = get_author(page['url'])
这有效。但很困惑,而且感觉不像 python 。 pages[index]
感觉像是我不应该在 Python 中做的事情。
有没有办法通过列表理解来做到这一点?或者其他一些更Pythonic的方式?
pages = [??? for page in pages]
最佳答案
你可以使用这样的 list
理解:
result = [{**page, 'author': get_author(page['url'])}
for page in pages]
# This works too:
result = [dict(**page, author=get_author(page['url']))
for page in pages]
# but is less preferred because it will fail for input containing non-string keys
这会创建一个新的 dict
对于每个原件 dict
使用额外的 key ,author
,基于 get_author
的值应用于与 url
相对应的值关键。
请注意,它不会修改原始 list
.
示例:
def get_author(i):
if i == 1:
return 'hello'
else:
return 'bye'
pages = [{'url': 1},
{'url': 2}]
result = [{**page, **{'author': get_author(page['url'])}} for page in pages]
print(result)
输出:
[{'url': 1, 'author': 'hello'}, {'url': 2, 'author': 'bye'}]
关于python - 如何将属性添加到字典列表到Python中的列表理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56139952/