首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我有一个包含字典的元组列表。如何编辑代码以在这些字典中的单独列表中找到值?

我有一个包含字典的元组列表。如何编辑代码以在这些字典中的单独列表中找到值?
EN

Stack Overflow用户
提问于 2016-11-22 03:10:30
回答 3查看 99关注 0票数 3

我有一个数据结构L= (int,dict{key: value}),(int,dict{key: value}).

给定输入列表0,1,我希望找到任何字典键,其中输入列表0,1的两个/所有值都存在。

目前,我的错误是,如果我使用input_list = 0,1,该函数将返回一个匹配,其中字典值正好,值为0,1。只有第二个结果是可取的。我觉得这是一个微小的变化,但我无法理解。我该怎么做才能让这一切发生?

代码语言:javascript
运行
复制
#Python3
L = [(0, {0: [0], 1: [0, 1], 2: [0, 2], 3: [0, 3], 4: [0, 4]}), (1, {0: [1, 0], 1: [1], 2: [5, 1, 2,], 3: [1, 3], 4: [1, 4]}), (2, {0: [2, 0], 1: [2, 1], 2: [2], 3: [2, 3], 4: [2, 4]}), (3, {0: [3, 0], 1: [3, 1], 2: [3, 2], 3: [3], 4: [3, 4]}), (4, {0: [4, 0], 1: [4, 1], 2: [4, 2], 3: [4, 3], 4: [4]})]

#input_list = (eval(input('Enter your list: ')))
#input_list = ([0,1])
print('Input: ' + str(input_list))
for tupl in L:
    dict_a = (tupl[1])
    matching_key = ([key for key, value in dict_a.items() if all(v in input_list for v in value)])
    print('Node: ' + str(tupl[0]) + ' Match at key(s): ' + str(matching_key))

输出

代码语言:javascript
运行
复制
L = [(0, {0: [0], 1: [0, 1], 2: [0, 2], 3: [0, 3], 4: [0, 4]}), (1, {0: [1, 0], 1: [1], 2: [5, 1, 2,], 3: [1, 3], 4: [1, 4]}), (2, {0: [2, 0], 1: [2, 1], 2: [2], 3: [2, 3], 4: [2, 4]}), (3, {0: [3, 0], 1: [3, 1], 2: [3, 2], 3: [3], 4: [3, 4]}), (4, {0: [4, 0], 1: [4, 1], 2: [4, 2], 3: [4, 3], 4: [4]})]

Enter your list: [0,1]
Input: [0, 1]
Node: 0 Match at key(s): [0, 1]
Node: 1 Match at key(s): [0, 1]
Node: 2 Match at key(s): []
Node: 3 Match at key(s): []
Node: 4 Match at key(s): []

Enter your list: [1,5,2]
Input: [1, 5, 2]
Node: 0 Match at key(s): []
Node: 1 Match at key(s): [1, 2]
Node: 2 Match at key(s): [1, 2]
Node: 3 Match at key(s): []
Node: 4 Match at key(s): []

谢谢您:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-22 03:25:44

您可以使用代码检查value是否以错误的方式包含input_list中的所有项。all(v in input_list for v in value)检查value中的所有项是否可以从input_list中找到。如果你用相反的方式改变它,它就会像你预期的那样起作用:

代码语言:javascript
运行
复制
all(v in value for v in input_list)

注意,如果要将input_list转换为set,可以很容易地检查input_list是否是value的子集。这将更容易理解和更有效率:

代码语言:javascript
运行
复制
L = [(0, {0: [0], 1: [0, 1], 2: [0, 2], 3: [0, 3], 4: [0, 4]}), (1, {0: [1, 0], 1: [1], 2: [5, 1, 2,], 3: [1, 3], 4: [1, 4]}), (2, {0: [2, 0], 1: [2, 1], 2: [2], 3: [2, 3], 4: [2, 4]}), (3, {0: [3, 0], 1: [3, 1], 2: [3, 2], 3: [3], 4: [3, 4]}), (4, {0: [4, 0], 1: [4, 1], 2: [4, 2], 3: [4, 3], 4: [4]})]

input_list = set([0,1])

for tupl in L:
    dict_a = tupl[1]
    matching_key = [key for key, value in dict_a.items() if input_list <= set(value)]
    print('Node: ' + str(tupl[0]) + ' Match at key(s): ' + str(matching_key))

输出:

代码语言:javascript
运行
复制
Node: 0 Match at key(s): [1]
Node: 1 Match at key(s): [0]
Node: 2 Match at key(s): []
Node: 3 Match at key(s): []
Node: 4 Match at key(s): []
票数 2
EN

Stack Overflow用户

发布于 2016-11-22 03:31:24

您可以使用set减法来解决:

代码语言:javascript
运行
复制
#Python3
L = [(0, {0: [0], 1: [0, 1], 2: [0, 2], 3: [0, 3], 4: [0, 4]}), (1, {0: [1, 0], 1: [1], 2: [5, 1, 2,], 3: [1, 3], 4: [1, 4]}), (2, {0: [2, 0], 1: [2, 1], 2: [2], 3: [2, 3], 4: [2, 4]}), (3, {0: [3, 0], 1: [3, 1], 2: [3, 2], 3: [3], 4: [3, 4]}), (4, {0: [4, 0], 1: [4, 1], 2: [4, 2], 3: [4, 3], 4: [4]})]

input_list = (eval(input('Enter your list: ')))
#input_list = [1,5,2]
print('Input: ' + str(input_list))
for tupl in L:
    dict_a = (tupl[1])
    matching_key = []
    for key, lst in tupl[1].items():
        if not (set(lst) - set(input_list)):
            matching_key.append(key)
    print('Node: ' + str(tupl[0]) + ' Match at key(s): ' + str(matching_key))

我建议您避免使用像这个[key for key, value in dict_a.items() if all(v in input_list for v in value)]这样的构造,因为它会使您的代码难以理解。

票数 0
EN

Stack Overflow用户

发布于 2016-11-22 03:24:17

请阅读:

Check if two unordered lists are equalHow can I compare two ordered lists in python?

根据您在检查是否相等时要使用的语义,您可以使用一种或另一种解决方案。如果您要进行简单的排序列表比较,我将使用以下方法:

代码语言:javascript
运行
复制
for tupl in L:
    dict_a = (tupl[1])
    if dict_a != input_list:
        continue
    print('Node: ' + str(tupl[0]) + ' Match at key(s): ' + str(matching_key))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40733179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档