搜索Python字典
我需要在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