python - 有没有更好的方法来获取字典列表中的字典值?
问题描述
我有一个这样的列表:
[{'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)
我不知道如何以优雅的方式实现这一点。期待您的解决方案。
解决方案
这应该有效:
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 list 对象的.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']
更简洁的方法(可能更 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
循环。
推荐阅读
- python - 通过从 Zap B 传递 POST 函数来触发 Zap A
- swift - 如何检查结构的实例本身是否是另一个结构的实例
- powershell - 将变量传递到 sql loader ctrl 文件中
- javascript - 使用两个数组排序
- javascript - 从数组中提取图像索引以便将图像插入引导轮播
- gradle - Gradle 多模块项目未在其中一个模块中运行测试
- html - Ruby on rails:如何显示另一个表中的信息?
- python - Python 无法连接到 grpc 通道->“无法连接到所有地址”“grpc_status”:14
- coldfusion - cfmail 拒绝样式声明
- python - 使用 Anaconda 安装的 pip