python检查字典键是否具有特定值

时间:2015-04-24 04:38:10

标签: python

我有一个以这种结构返回数据的函数:

dict1 = [{'status':u'received'}]
dict2 = [{'status': u'pending'}]

我想检查状态并根据状态返回一些值。 这对我自己没有任何意义,但我尝试这样做:

if 'received' in dict1.values('status'):
     #do something

结果如预期,"它没有工作"。这只是一次恐慌。

4 个答案:

答案 0 :(得分:2)

您的“词典”实际上就是列表。因此,当您尝试拨打 Private Sub SongListBox_Click(sender As Object, e As EventArgs) Handles SongListBox.Click Dim song As String = SongListBox.SelectedIndex If SongListBox.SelectedIndex = "-1" Then Else Dim SongPath As String = Pathlist.Items.Item(song) Dim SongProcess As New ProcessStartInfo SongProcess.FileName = "C:\Program Files\Winamp\winamp.exe" SongProcess.Arguments = SongPath SongProcess.UseShellExecute = True SongProcess.WindowStyle = ProcessWindowStyle.Normal MsgBox(Pathlist.Items.Item(song), MsgBoxStyle.Information, "Song") Dim SongStart As Process = Process.Start(SongProcess) SongListBox.Select() End If End Sub 时,您正在列表中调用dict1.values()。请尝试拨打.values

dict1[0].values()

答案 1 :(得分:2)

测试列表dict1中的任何字典是否具有值received

>>> dict1 = [{'status':u'received'}]
>>> any(u'received' in d.values() for d in dict1)
True

更具体地检查列表dict1中的任何字典是否具有收到的状态:

>>> any(u'received' == d.get('status') for d in dict1)
True

答案 2 :(得分:2)

我认为你的主要问题是名字混乱。事实上,dict1dict2不是字典,而是包含字典的列表。这可能不是你想要的。如果它是,如果我理解你想要的,

if any(element['status'] == 'received' for element in dict1):
    # do something

(目前尚不清楚在多元素列表的情况下你想要返回什么,如[{'status':u'received'}, {'status':u'pending'}],或者你甚至可以得到类似的东西;你可能需要根据你的答案进行修改)

答案 3 :(得分:2)

因为你有一个包含词典的列表, 你可以尝试

for element in dict1:
    if 'received' in element.values():
        #then do something