Python 无法将元组项与列表项匹配

Python 无法将元组项与列表项匹配,python,list,loops,dictionary,Python,List,Loops,Dictionary,我有一个整数列表(标签)。我想将列表项映射到字典(类)的值项,并获得相应的字典键作为输出 我正在使用: h = classes.items() for x in tags: for e in h: # print x, e, # uncomment this line to make a diagnosis if x == e[1]: print e[0] else: print "No M

我有一个整数列表(标签)。我想将列表项映射到字典(类)的值项,并获得相应的字典键作为输出

我正在使用:

h = classes.items()
for x in tags:
    for e in h:
        # print x, e,  # uncomment this line to make a diagnosis
        if x == e[1]:
            print e[0]
        else:
            print "No Match"
Classes
是字典。
Tags
是包含我要与类映射的项的列表。当我运行此代码时,我在输出中得到2616次
不匹配

2616 = 8 (no. of tuples)*327 (no. of items of tags list)

对于每个标记,您迭代所有键,并在最多点击一次时打印是否匹配。例如,如果您有10个项目,那么对于每个标记,您将打印1个命中和9个未命中

由于要存储此数据,最简单的方法是反转字典映射,即make key->value-to-value->key。但是,这假设所有值都是唯一的,您的示例也暗示了这一点

def map_tags(tags, classes):
    tag_map = {value: key for key, value in classes.items()}
    return [tag_map.get(t, 'No match') for t in tags]
但是,要小心。在
类中
示例中,值是整数,而标记是字符串。在用它们绘制地图时,您希望两者匹配。如果标签是字符串,则更改

tag_map.get(t, 'No match')


如果我明白你想做什么,也许这会有帮助

>>> tags
['0', '2', '1', '3', '4', '7', '2', '0', '1', '6', '3', '2', '8', '4', '1', '2', '0', '7', '5', '4', '1']
>>> classes
{'Tesla': 7, 'Nissan': 0, 'Honda': 5, 'Toyota': 6, 'Ford': 1, 'Mazda': 4, 'Ferrari': 2, 'Suzuki': 3}
tags
是字符串列表,而不是整数-所以让我们将其转换为整数列表

>>> tags = map(int, tags)
classes
是一个字典映射car make到int,但我们希望使用该值作为查找。我们可以反转字典(交换键和值)

现在这就是
标签
类_inverse
的样子

>>> tags
[0, 2, 1, 3, 4, 7, 2, 0, 1, 6, 3, 2, 8, 4, 1, 2, 0, 7, 5, 4, 1]
>>> classes_inverse
{0: 'Nissan', 1: 'Ford', 2: 'Ferrari', 3: 'Suzuki', 4: 'Mazda', 5: 'Honda', 6: 'Toyota', 7: 'Tesla'}
现在我们可以为列表中的每个项目收集反向字典的值

>>> [classes_inverse.get(t, "No Match") for t in tags]
['Nissan', 'Ferrari', 'Ford', 'Suzuki', 'Mazda', 'Tesla', 'Ferrari', 'Nissan', 'Ford', 'Toyota', 'Suzuki', 'Ferrari', 'No Match', 'Mazda', 'Ford', 'Ferrari', 'Nissan', 'Tesla', 'Honda', 'Mazda', 'Ford']

尝试在if语句之前添加一行print x,e。这将帮助您理解为什么比较不起作用。为了获得帮助,您可能想在此处共享您的输出摘要。您能发布
class.items()
标记的示例吗?@gauden Sir我收到了:liverpool@gandalf:~/rise/rise$python test.py 7回溯(最后一次调用):文件“test.py”,第57行,打印x,e NameError:没有定义名称“e”,这是有意义的,因为变量e是在第二个“for”循环中启动的。您真的想将标记映射到字典键,并可能将其存储到某个对象,还是只想打印它们?@IronFist示例数据:class.items()=[('Ford',1),('Nissan',0),('Mazda',4),('Ferrari',2),('Suzuki',3),('Honda',5),('Toyota',6),('Tesla',7)]标签=[0','2','1','3','4','7','2','0','1','6','3','2','8','4','1','2','0','7','5','4','1',非常感谢您。问题在于当我在for循环中将字符串与整数进行比较时,
标记是字符串列表。感谢大量的
map
功能。它在转化后发挥了巨大的作用。
>>> tags
[0, 2, 1, 3, 4, 7, 2, 0, 1, 6, 3, 2, 8, 4, 1, 2, 0, 7, 5, 4, 1]
>>> classes_inverse
{0: 'Nissan', 1: 'Ford', 2: 'Ferrari', 3: 'Suzuki', 4: 'Mazda', 5: 'Honda', 6: 'Toyota', 7: 'Tesla'}
>>> [classes_inverse.get(t, "No Match") for t in tags]
['Nissan', 'Ferrari', 'Ford', 'Suzuki', 'Mazda', 'Tesla', 'Ferrari', 'Nissan', 'Ford', 'Toyota', 'Suzuki', 'Ferrari', 'No Match', 'Mazda', 'Ford', 'Ferrari', 'Nissan', 'Tesla', 'Honda', 'Mazda', 'Ford']