python - 为什么我的代码在从 dict 中提取值时不起作用
问题描述
我浏览了Accessing Python dict values with key start characters的链接
my = [{'k1': 'a','k2': '1234','k3':'12'},
{'k1': 'a','k2': '1295','k3':'12'}]
for i in my:
#print ([ v for k,v in i.items() if str(v).startswith('12')])
print ([ v for k,v in i.items() if i['k2'].startswith('12')])
我的出
['a', '1234', '12']
['a', '1295', '12874']
预期的
['1234']
['1295']
解决方案
您可以跳过外部列表并使用列表推导:
my = [{'k1': 'a','k2': '1234','k3':'12'},
{'k1': 'a','k2': '1295','k3':'12'}]
print([x['k2'] for x in my if x['k2'].startswith('12')])
原始代码的问题是,i
如果它有'k2'
一个值以'12'
. 它可以写成:
for i in my:
if i['k2'].startswith('12'):
print(i['k2'])
请注意,代码引发了一个KeyError
if'k2'
不存在于其中一个字典上,因此您可以使用
[x['k2'] for x in my if 'k2' in x and x['k2'].startswith('12')]
如果您预料到这种情况。
推荐阅读
- numpy - “错误”的 TF IDF 分数
- sql - 插入具有不同(控制重复)一列
- vue.js - 如何从组件模板内的 Vuex getter 获取更新的值?
- uproot - uproot:从 jupyter notebook 上的 .root 文件加载和重新绘制 TH2 直方图的最佳方法
- redis - 如何从多个 RDB 文件中恢复 Redis
- mysql - 如何减少包含记录数据的列中的冗余单元格
- c++ - 非类模板中数据成员 std::array 的编译时间大小 (C++14)
- intellij-idea - 类型参数“S”的推断类型“S”不在其范围内,为什么?
- sql - 将日期 unix 转换为时间戳
- sql - 为什么在从 VARCHAR 转换为 Date 数据类型时使用 TO_DATE() 时出现错误