Python 如何从列表中相应的索引名中筛选列表值?
我有一个看似微不足道的问题,但我看不到最简单的解决办法。我有一份清单:Python 如何从列表中相应的索引名中筛选列表值?,python,list,filtering,Python,List,Filtering,我有一个看似微不足道的问题,但我看不到最简单的解决办法。我有一份清单: Example_list=[[['MAX_BID', '€9'], ['BID_NUMBER', 10], ['DATE', '2017-01-25 20:10:33 UTC'], ['SHIPPING_COST', '17.90']], [['MAX_BID', '€165'], ['BID_NUMBER', 30], ['DATE', '2017-01-25 20:12:01 UTC'], ['SHIPPING_COS
Example_list=[[['MAX_BID', '€9'], ['BID_NUMBER', 10], ['DATE', '2017-01-25 20:10:33 UTC'], ['SHIPPING_COST', '17.90']],
[['MAX_BID', '€165'], ['BID_NUMBER', 30], ['DATE', '2017-01-25 20:12:01 UTC'], ['SHIPPING_COST', '16.00']]]
现在我只想在第二个列表中过滤BID_NUMBER的值。显然,以下工作:
>>> print(test[1][1][1])
30
不幸的是,这将不是一个解决方案,因为实际情况中有大小不同的列表,导致所需列表值的位置不同
我也尝试过以下方法,但这似乎不是最简单的解决方案:
for i in test[1]:
for p in i:
if "BID_NUMBER" in p:
print(p[1])
30
有更优雅的解决方案吗 如果每个即时子列表中的所有子列表都是键值对,则可以在将
BID_NUMBER
作为键访问之前,将封闭列表转换为dict:
for d in map(dict, test):
print(d['BID_NUMBER'])
否则,如果密钥对子列表的深度不一致,则在尝试转换try
块中的子列表后,可以使用while
循环继续查找块中的内部子列表,但块除外:
for l in test:
while True:
try:
d = dict(l)
break
except ValueError:
l = l[0]
print(d['BID_NUMBER'])
第一个列表有3个级别,对吗?谢谢你的评论,现在这会导致以下错误:ValueError:dictionary update sequence元素#0的长度为4;2.我要看看。因此,您输入的子列表的深度确实不一致。您应该尝试修复产生此类不良数据的任何内容的逻辑,或者,如果您无权,您可以在我的更新答案中使用其他解决方案。感谢您在解释如何处理不一致的子列表时提供的额外解释!就像一个符咒。在用例示例中有一个括号错误,导致深度不一致。真实的案例数据没有不一致的深度,您的第一个解决方案是有效的。我已经编辑了上面的帖子,现在你原来的解决方案也很有魅力。谢谢