如何通过字典值搜索带有嵌套字典的列表,并返回带有字典元素的列表索引

时间:2019-12-29 20:03:29

标签: python list dictionary

如果我有一个包含一些嵌套字典的列表,每个字典都包含相同的键集和值类型集。

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)

但这似乎很麻烦。预先谢谢你。

3 个答案:

答案 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))