【问题标题】:Append the same key value to a list of dict将相同的键值附加到 dict 列表
【发布时间】:2020-02-25 22:39:30
【问题描述】:

我有一个字典列表,我想将相同的键值附加到所有字典。 例如:

l = [
    {'name' : 'abc', 'age' : '20', 'city' : 'abc'},
    {'name' : 'def', 'age' : '20', 'city' : 'def'},
    {'name' : 'hij', 'age' : '20', 'city' : 'hij'},
    {'name' : 'klm', 'age' : '20', 'city' : 'klm'},
    {'name' : 'nop', 'age' : '20', 'city' : 'nop'}
    ]

for d in l:
    d['date'] = '30/10/2019'

输出:

{'name': 'abc', 'age': '20', 'city': 'abc', 'date': '30/10/2019'}
{'name': 'def', 'age': '20', 'city': 'def', 'date': '30/10/2019'}
{'name': 'hij', 'age': '20', 'city': 'hij', 'date': '30/10/2019'}
{'name': 'klm', 'age': '20', 'city': 'klm', 'date': '30/10/2019'}
{'name': 'nop', 'age': '20', 'city': 'nop', 'date': '30/10/2019'}

所以这是可行的,但在我的实际情况下,我有更多的值(2000 个字典和 40 个键)。而且我想知道是否有一种方法可以在没有 for 的情况下将日期附加到每个字典。

【问题讨论】:

  • 没有某种循环就无法附加日期。
  • 编写你自己的 getter 来返回日期
  • FWIW,带有 40 个键的 2000 个字典并不大。您的解决方案应该很好。你有麻烦吗?是不是太慢了?没有按预期工作?
  • 刚刚使用 pandas 快速检查了性能,循环似乎要快得多。看不出性能有什么问题。这个for i in l: i['date'] = '30/10/2019'500us 用于2000 个字典的列表

标签: python python-3.x list dictionary vectorization


【解决方案1】:

我只会使用 for 循环。

但是,本着实际回答问题的精神,您可以使用 map() 以 C 速度运行隐式 for 循环:

>>> from itertools import repeat
>>> from collections import deque
>>> from operator import setitem

>>> _ = deque(map(setitem, l, repeat('date'), repeat('30/10/2019')), maxlen=0)

>>> from pprint import pprint
>>> pprint(l)
[{'age': '20', 'city': 'abc', 'date': '30/10/2019', 'name': 'abc'},
 {'age': '20', 'city': 'def', 'date': '30/10/2019', 'name': 'def'},
 {'age': '20', 'city': 'hij', 'date': '30/10/2019', 'name': 'hij'},
 {'age': '20', 'city': 'klm', 'date': '30/10/2019', 'name': 'klm'},
 {'age': '20', 'city': 'nop', 'date': '30/10/2019', 'name': 'nop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2013-12-23
    • 1970-01-01
    • 2021-06-07
    相关资源
    最近更新 更多