如果我有一个包含一些嵌套字典的列表,每个字典都包含相同的键集和值类型集。
list = [{'a': 1, 'b': 2.0, 'c': 3.0},
{'a': 4, 'b': 5.0, 'c': 6.0},
{'a': 7, 'b': 8.0, 'c': 9.0}]
在'b'字典键中返回出现的第一个5.0的列表索引的最Python方式是什么,或者什么都没有找到,则返回None?
我知道我可以手动进行迭代和搜索:
#with the list above...
result = None
for dict in list:
if dict['b'] == 5.0:
result = list.index(dict)
break
print result
#(prints 1)
#as another example, same code but searching for a different value in 'b'
result = None
for dict in list:
if dict['b'] == 6.0:
result = list.index(dict)
break
print result
#(prints None)
但这似乎很麻烦。预先谢谢你。
答案 0 :(得分:8)
您可以使用next()
内置方法(如果未找到,它将返回None
):
lst = [{'a': 1, 'b': 2.0, 'c': 3.0},
{'a': 4, 'b': 5.0, 'c': 6.0},
{'a': 7, 'b': 8.0, 'c': 9.0}]
print(next((i for i, d in enumerate(lst) if d['b'] == 5.0), None))
打印:
1
答案 1 :(得分:2)
您可以使用熊猫过滤数据。
喜欢这个
import pandas as pd
list = [{'a': 1, 'b': 2.0, 'c': 3.0},
{'a': 4, 'b': 5.0, 'c': 6.0},
{'a': 7, 'b': 8.0, 'c': 9.0}]
将您的列表放入熊猫数据框,
df = pd.DataFrame(list)
您的数据
print(df.head())
a b c
0 1 2.0 3.0
1 4 5.0 6.0
2 7 8.0 9.0
然后过滤
df = df[df.b==5]
和您过滤的数据,
print(df.head())
a b c
1 4 5.0 6.0
如果没有匹配项,则df将为空数据框。
要获取索引,
df.index[df.b==5].tolist()
答案 2 :(得分:0)
我做点什么,据您了解,我认为这会有所帮助。
li = [{'a': 1, 'b': 2.0, 'c': 3.0},
{'a': 4, 'b': 5.0, 'c': 6.0},
{'a': 7, 'b': 8.0, 'c': 9.0}]
def find_first(num):
for di in li:
for k, v in di.items():
if v == num:
return li.index(di)
else:
return None
print(find_first(5))