迭代在Python中可能存在或不存在的dict值的正确方法

时间:2014-12-19 01:31:14

标签: python

基本上,如果我正在尝试访问我希望是可迭代的dict值,那么除了使用类似DefaultDict之外,还有一个简单的单行代码可以解释该值。有这个

for el in (myDict.get('myIterable') or []):
    pass

虽然感觉不是特别pythonic ...

4 个答案:

答案 0 :(得分:4)

for item in a_dict.get("some_key",[]):
    #do whatever

如果项目保证是列表(如果存在)...如果它可能是列表以外的其他内容,则需要不同的解决方案

答案 1 :(得分:3)

您可以创建dict的子类,使用__missing__(self, key)方法提供默认值:

class EmptyIterableDict(dict):
def __missing__(self, key):
    return []

使用示例:

test = EmptyIterableDict()
test['a'] = [3,2,1]
test['b'] = [2,1]
test['c'] = [1]

for v in test['a']:
    print v

3
2
1

for v in test['d']:
    print v

如果你已经想要像那样迭代的香草dict,你可以制作临时副本:

original = {'a': [1], 'b': [2,3]}

temp = EmptyIterableDict(original)
for v in temp['d']:
    print v

答案 2 :(得分:1)

明确的多行方法是:

if 'my_iterable' in my_dict:
    for item in my_dict['my_iterable']:
        print(item)

也可以写成一行理解:

[print(item) for item in my_dict['my_iterable'] if 'my_iterable' in my_dict]

答案 3 :(得分:0)

这不是一个单行,但它解决了两种可能的失败。

try:
    for item in dictionary[key]:
        print(item)
except KeyError:
    pass  # Key wasn't present in the dictionary.
except TypeError:
    pass  # Key was present but corresponding item not iterable.