基本上,如果我正在尝试访问我希望是可迭代的dict值,那么除了使用类似DefaultDict之外,还有一个简单的单行代码可以解释该值。有这个
for el in (myDict.get('myIterable') or []):
pass
虽然感觉不是特别pythonic ...
答案 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.