搜索Python字典

2 投票
3 回答
912 浏览
提问于 2025-04-16 13:41

我需要在Python中从一个列表里删除一个条目。这个列表的内容是这样的:

{'Other': '1.05', 'United States': '93.67', 'Liberia': '3.26', '" alt="" />\n</p>\n</div>': '', 'Canada': '2.02'}

我知道可以这样写:del List_Of_Countries['Canada']。这样做效果很好,但我在选择一个包含" alt="" />\n</p>\n</div>的条目时遇到了问题。

我觉得可能是因为多了一个双引号,但我还有一些列表里有类似的条目,所以有没有简单的方法可以搜索到包含“alt”的条目,或者是把“”作为键的值的条目(这样我可以学会并应用到其他情况)?

3 个回答

0

dpath 可以解决这个问题。

http://github.com/akesterson/dpath-python

只需要设置一个过滤函数,这个函数会检查符合某种模式的字符串内容,然后把它传给删除函数。所以如果你想删除的东西在一个字典里:

$ easy_install dpath
>>> def filter(x):
>>> ... return (str(x) == r'" alt="" />\n</p>\n</div>')
>>> ...
>>> dpath.util.delete(MY_DICT, '*', filter=filter)

.... 这样就会删除字典中所有符合你过滤函数定义的字符串的对象。

4
>>> x = {'Other': '1.05', 'United States': '93.67', 'Liberia': '3.26', '" alt="" />\n</p>\n</div>': '', 'Canada': '2.02'}
>>> del x['Canada']
>>> x
{'United States': '93.67', 'Liberia': '3.26', 'Other': '1.05', '" alt="" />\n</p>\n</div>': ''}
>>> del x['" alt="" />\n</p>\n</div>']
>>> x
{'United States': '93.67', 'Liberia': '3.26', 'Other': '1.05'}

根据某些条件动态选择字典中的键是不可能的,因为字典是通过哈希表来实现的,键在内部会被哈希处理。因此,无法找到一个包含某些内容的键,因为哈希会生成完全不同的东西。

你能做的唯一事情就是(显而易见)遍历所有元素,找到正确的那些。

2
a = {'Other': '1.05', 'United States': '93.67', 'Liberia': '3.26', '" alt="" />\n</p>\n</div>': '', 'Canada': '2.02'}
b = {}

for k, v in a.iteritems():
    if v == ''  or "alt" in k:
        pass
    else:
        b[k] = v
print b

一个虽然不太优雅,但能用的解决方案 :D

撰写回答