如何检查字典中的所有值是否都存在于列表中?

时间:2019-01-04 10:44:19

标签: python python-3.x dictionary

因此,我有一个要查询的用户首选项字典,以查看列表中是否存在所有字典值。

例如,我有一个类似的字典:

dct = { 'key1' : 'value1', 'key2' : 'value2'}

我有一个像这样的列表:

lst = ['list1', 'list2', 'list3', 'list4']

我正在尝试检查字典中的所有值是否都在列表中。

我该怎么做?

编辑更具体:

我的字典是

userprefs = {'RON' : 'PHX'}

我的清单是

poss_matches = [['misc0', 'misc1', 'misc2', 'misc3', 'misc4', 'misc5', 'misc6', 'misc7', 'PHX-']]

但是,如果我使用类似的东西:

    for seq in poss_matches:
        for p in userprefs:
            if userprefs[p] in seq:
                matches.append(seq)

我得到一个空的比赛清单。

4 个答案:

答案 0 :(得分:2)

您需要all()for loop

dct = { 'key1' : 'list1', 'key2' : 'list2','k3':'list3','k4':'list4'}
lst = ['list1', 'list2', 'list3', 'list4']

all(x in lst for x in dct.values())

输出:

True

答案 1 :(得分:1)

您可以尝试以下方法:

def checker():
    for value in dct.values():
        if value in lst:
            continue
        else:
            return False
    return True

dct = { 'key1' : 'list1', 'key2' : 'list1'}
lst = ['list1', 'list2', 'list3', 'list4']
print(checker())

通过这种方式,您将从值变量的字典中获取值,并检查其是否存在于列表中。

答案 2 :(得分:1)

方法1:

myDict = { 'key1' : 'value1', 'key2' : 'value2'}
values_myDict = myDict.values() # Outputs all the values of a dictionary in a list.
values_myDict
    ['value1', 'value2']

# Use set() - In case myList has all the values of the dictionary, we will get True, else False
myList = ['list1', 'list2', 'list3', 'list4', 'value1', 'value2']
bool_value = set(values_myDict) < set(myList)
bool_value
    True     # because both 'value1' & 'value2' are presnt.

myList = ['list1', 'list2', 'list3', 'list4', 'value1',]
bool_value = set(values_myDict) < set(myList)
bool_value
    False    # because 'value2' is not present.

方法2:,如 Jon Clements 所建议。更加简洁明了。

myDict = { 'key1' : 'value1', 'key2' : 'value2'}
myList = ['list1', 'list2', 'list3', 'list4', 'value1', 'value2']
bool_value = set(myDict.values()).issubset(myList)
bool_value
    True

myList = ['list1', 'list2', 'list3', 'list4', 'value1']
bool_value = set(myDict.values()).issubset(myList)
bool_value 
    False

答案 3 :(得分:-1)

您可以尝试以下方法

dct = { 'key1' : 'list1', 'key2' : 'list3'}
lst = ['list1', 'list2', 'list3', 'list4']
flag='N'
for each in dct:
   if dct[each] in lst:
      flag='Y'
   else:
      flag='N'
print (flag)