我有一个这样的列表:
[{'enter_time': '2021-03-01 07:15:16', 'leave_time': '2021-03-01 07:16:06'}, {'enter_time': '2021-03-02 08:15:16', 'leave_time': '2021-03-02 08:16:06'}]
如你所见,列表中的每一项都是一个字典。
现在,我想得到一个包含所有 enter_time
和 leave_time
的新列表。
我应该得到一个这样的新列表:
>>> new_list
>>> ['2021-03-01 07:15:16', '2021-03-01 07:16:06', '2021-03-02 08:15:16', '2021-03-02 08:16:06']
我以一种尴尬的方式尝试过:
datetime_str_list = [{'enter_time': '2021-03-01 07:15:16', 'leave_time': '2021-03-01 07:16:06'}, {'enter_time': '2021-03-02 08:15:16', 'leave_time': '2021-03-02 08:16:06'}]
new_list = []
for item in datetime_str_list:
for dict_value in item.values():
new_list.append(dict_value)
print('new_list', new_list)
我不知道如何以优雅的方式实现这一点。期待您的解决方案。
答案 0 :(得分:5)
这应该有效:
times = [{'enter_time': '2021-03-01 07:15:16', 'leave_time': '2021-03-01 07:16:06'},
{'enter_time': '2021-03-02 08:15:16', 'leave_time': '2021-03-02 08:16:06'}]
我首先创建一个列表来保存结果 (new_times
)。
对于原始列表中名为 times
的每个项目,我们提取与两个键中的每一个关联的值:enter_time
和 leave_time
。
我们可以使用语法 item['enter_time']
OR item['leave_time']
引用其中的每一个。
Python 列表对象的 .extend()
方法允许我们通过向列表末尾添加多个项目来扩展列表(与一次只添加一个项目的 `.append() 方法相比) ).
new_times = list()
for item in times:
new_times.extend([item['enter_time'], item['leave_time']])
这样,new_times
应该会产生:
['2021-03-01 07:15:16',
'2021-03-01 07:16:06',
'2021-03-02 08:15:16',
'2021-03-02 08:16:06']
如果显式引用 item 的各个元素没有任何好处,我们可以通过调用与每个 .values
字典关联的 item
来简单地引用它们。
new_times = list()
for item in times:
new_times.extend(item.values())
可以通过嵌套推导来实现这一点,但这可能会以牺牲可读性为代价。
new_times_lc = [value for subdict in times for value in subdict.values()]
基本上,这相当于嵌套的 for
循环。
答案 1 :(得分:2)
对于列表理解方法:
ggsave("agg_png-ggsave.png", p, device = ragg::agg_png, res = 300, units = "in")
ggs <- image_read("agg_png-ggsave.png")
print(ggs)
这会将原始字典中的所有值分配到一个列表列表中,然后将该列表展平为所有值的一维列表
答案 2 :(得分:1)
使用地图功能:
from itertools import chain
times = [{'enter_time': '2021-03-01 07:15:16', 'leave_time': '2021-03-01 07:16:06'}, {'enter_time': '2021-03-02 08:15:16', 'leave_time': '2021-03-02 08:16:06'}]
new_times = list(chain(*list(map(lambda x: list(x.values()), times))))
这会从每个字典中获取值并解压它们,类似于列表推导式。