我有一个以这种结构返回数据的函数:
dict1 = [{'status':u'received'}]
dict2 = [{'status': u'pending'}]
我想检查状态并根据状态返回一些值。 这对我自己没有任何意义,但我尝试这样做:
if 'received' in dict1.values('status'):
#do something
结果如预期,"它没有工作"。这只是一次恐慌。
答案 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)
我认为你的主要问题是名字混乱。事实上,dict1
和dict2
不是字典,而是包含字典的列表。这可能不是你想要的。如果它是,如果我理解你想要的,
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