将字符串与字典值完全匹配并检索键 - python
Posted
技术标签:
【中文标题】将字符串与字典值完全匹配并检索键 - python【英文标题】:Matching a string with a dictionary value exactly and retrieving the key - python 【发布时间】:2013-06-11 12:08:16 【问题描述】:我有一个从 mysql DB 获取的字典,ID 是键,值是字符串(确切地说是文件的相对 Windows 路径)。我有另一个列表,其中包含 Windows 路径作为元素。现在,我需要将列表元素与字典值匹配,如果找到完全匹配,我需要检索该元素的键,如果不存在,我将在数据库中更新
我当前的代码:
for line in f1:
line = line.strip()
try:
index = next(k for (k,v) in self.db_file_list.iteritems() if line in v)
file_list_csv.append(index)
这里的问题是:假设我的字典中的值是“abc def”,“a/b/c” 那么如果我搜索值“abc”或“a/b”它仍然会匹配并给我不是我想要的键值。
请帮帮我,我是 Python 的新手。 非常感谢!
~苏拉夫
【问题讨论】:
我不清楚你想做什么。您是否正在尝试从键-> 值映射到值-> 键映射?如果是,您确定 value->key 映射是唯一的吗? 我认为你把它弄反了。这里所说的“键”实际上是一个值,而你所说的值实际上是一个键。所以像dict( reverse(x) for x in dic.items() )
这样的东西可能会有所帮助。
如果你正在寻找逆映射,这是this question的副本
嗨@mgilson:是的,值->键映射是唯一的。 DB中的表只是一个文件列表,id是自动递增的,所以它是唯一的。但是即使我使用 dict reverse,它也不能解决部分匹配而不是完全匹配的问题,对吗?谢谢!
【参考方案1】:
如果您唯一的问题是您还要匹配子字符串匹配项,那么将 line in v
替换为 line == v
就足够了(在这种情况下请注意使用 ==
而不是 is
:is
进行身份比较,而==
只是比较值)。
【讨论】:
嗨@Gjallar:非常感谢您的建议:)以上是关于将字符串与字典值完全匹配并检索键 - python的主要内容,如果未能解决你的问题,请参考以下文章
将字典的键与 List 的值进行比较,并返回所有匹配的值,包括重复值