python - 如何将属性添加到字典列表到Python中的列表理解?

标签 python python-3.x list-comprehension

我有一个字典列表。对于每个字典,我需要将其属性之一传递给函数,然后根据该函数的结果分配一个新属性。

例如: 我有一个网站的页面列表。我需要循环遍历它们,并根据 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/

相关文章:

python - 在Python3中为DataFrame创建列名的问题

python - 无法使用 Python 填充 WPF DataGrid

python - pip 连接失败 : cannot fetch index base URL http://pypi. python.org/simple/

python - 根据另一个列表中的值从元组列表中删除重复值

python - 使用字符集编码 UTF-8 发送电子邮件 - Python + boto3

c - 将各种数据类型的值编码为二进制文件(python),然后在c中解码它们

python - 如何打包我的 Python 3 程序以便我可以发布它

Haskell - 模式匹配在列表理解中如何失败?

python - 如何为 pandas 构建带有嵌套 for 循环和条件的列表理解?

python - aiohttp+sqlalchemy : Can't reconnect until invalid transaction is rolled back