有没有更好的方法来获取字典列表中的字典值?

我有一个这样的清单:

[{'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'}]

如您所见,列表中的每一项都是一个字典。现在,我想得到一个包含 allenter_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)

我不知道如何以优雅的方式实现这一点。期待您的解决方案。

回答

这应该有效:

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_timeleave_time

我们可以使用语法item['enter_time']OR来引用其中的每一个item['leave_time']

.extend()Python 列表对象的方法允许我们通过向列表末尾添加多个项目来扩展列表(与一次只添加一个项目的`.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']

更简洁的方法(可能还有更多 Pythonic 的方法)

如果显式引用 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循环。


以上是有没有更好的方法来获取字典列表中的字典值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>