如何从值为列表的字典中获取键值?

时间:2017-06-21 14:32:23

标签: python dictionary

我有一个字典,其中每个键都有几个数据列表作为其值

myDict = {'data1' : ['data_d','dataD']['data_e','dataE']['data_f','dataF']}

我希望能够输入列表中的一个值,然后给出密钥。这样我就可以获得列表中的其他值,因为我有密钥。

我已经尝试了

dataKey = (list(myDict.keys())[list(myDict.values()).index(dataD)])

但那不起作用

我也试过

for k, v in myDict.items():
    if 'dataD' in v:
        print k

但这也不起作用。

附带问题,在我看过的问题中,我看到人们使用变量k和va很多甚至没有OP提及它们,所以我想知道k和v是否已经在字典中设置了变量?

2 个答案:

答案 0 :(得分:0)

如果它们都是列表,那么你可以做这样的事情(如果我理解正确的话)

myDict = {
        'data1': [['data_d','dataD'], ['data_e','dataE'], ['data_f','dataF']],
        }

def find(dic, item):
    for k, v in dic.items():
        for ls in v:
            if item in ls:
                return k
    return False

print(find(myDict, "data_d"))
# OUT [data1]

答案 1 :(得分:0)

你的第二次尝试几乎是正确的,但是需要一个嵌套的for循环来遍历列表列表:

myDict = {'data1' : [['data_d','dataD'], ['data_e','dataE'], ['data_f','dataF']]}

for key, value in myDict.items():
    for sublist in value:
        if 'dataD' in sublist:
            print(key)  # -> data1

将名为kv的变量与字典一起使用纯粹是可选的,不是特殊属性 - 除了是“key”和“value”的非常短的缩写。

请注意,如果预计只发生一次匹配,则可以通过在找到一个匹配后停止搜索来提高代码效率。这是一种方法:

target = 'dataD'
try:
    for key, value in myDict.items():
        for sublist in value:
            if target in sublist:
                print(key)  # -> data1
                raise StopIteration  # found, so quit searching
except StopIteration:
    pass  # found
else:
    print('{} not found'.format(target))