有没有更好的方法来获取字典列表中的字典值?
我有一个这样的清单:
[{'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_time和leave_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循环。