将字符串与字典值完全匹配并检索键 - 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 就足够了(在这种情况下请注意使用 == 而不是 isis进行身份比较,而== 只是比较值)。

【讨论】:

嗨@Gjallar:非常感谢您的建议:)

以上是关于将字符串与字典值完全匹配并检索键 - python的主要内容,如果未能解决你的问题,请参考以下文章

如何将列名与字典键匹配并向计数器添加值

我正在尝试根据一些规则将字典键与其值匹配,而不使用其他库

将字典的键与 List 的值进行比较,并返回所有匹配的值,包括重复值

在 Python 中,如何将字典转换为 df 列,其中键与 df.index 值匹配?

Python序列结构--字典

在字符串中查找与字典中的值匹配的单词,然后在新列中返回键