提取Python字典值时代码输出不符合预期,请求排查解决
问题原因分析
你的代码之所以不符合预期,核心问题出在列表推导式的判断条件上:
[v for k,v in i.items() if i['k2'].startswith('12')]
这里的条件i['k2'].startswith('12')是针对整个字典i的固定判断——只要当前字典的k2值以12开头,那么在遍历这个字典的所有键值对时,每一个v都会被加入到结果列表里(因为这个条件对每一次循环都是True)。这就导致你得到的是整个字典的所有值,而不是你想要的k2对应的值。
解决方案
根据你的预期输出,这里分两种情况给出解决方式:
情况1:你明确要获取每个字典中k2键对应的值
如果你的需求就是直接提取k2的值,那完全不需要用列表推导式遍历所有键值对,直接访问键即可:
my = [{'k1': 'a','k2': '1234','k3':'12'}, {'k1': 'a','k2': '1295','k3':'12'}] for i in my: print([i['k2']]) # 输出 ['1234'] 和 ['1295']
情况2:你想筛选出**所有值以12开头且键为k2**的项
如果你是想确保只选中k2键且其值以12开头的项,可以修改判断条件,同时限定键和值:
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 k == 'k2' and str(v).startswith('12')])
这样既保证了只选k2键,又验证了它的值符合开头要求,结果会和你的预期一致。
另外,看你注释里的代码[v for k,v in i.items() if str(v).startswith('12')],这段代码会选出所有值以12开头的项(比如第一个字典会得到['1234', '12']),这和你的预期也不符,所以如果不是要这种结果,就不用考虑这个版本啦。
内容的提问来源于stack exchange,提问作者user6882757
相关产品推荐
相关产品推荐

