只迭代python字典的两个键

时间:2016-07-25 03:07:38

标签: python dictionary

使用如下设置迭代字典的pythonic方法是什么:

dict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': 6}

如果我只想在ab中的所有值上迭代for循环并跳过c。显然有一百万种方法可以解决这个问题,但我宁愿避免这样的事情:

for each in dict['a']:
    # do something
    pass
for each in dict['b']:
    # do something
    pass

像破坏性的东西:

 del dict['c']
 for k,v in dict.iteritems():
     pass

3 个答案:

答案 0 :(得分:2)

更通用的方法是在生成器表达式的末尾添加if,使用类似过滤器的方法。

如果要迭代每个可迭代值,请使用hasattr

进行过滤
for key in (k for k in dict if hasattr(dict[k], '__iter__')):
    for item in dict[key]:
        print(item)

如果您想要排除某些密钥,请使用"而不是"过滤器:

invalid = set(['c', 'd'])
for key in (k for k in dict if key not in invalid):
    ....

如果您只想选择特定键,请使用" in"过滤器:

valid = set(['a', 'b'])
for key in (k for k in dict if key in valid):
    ....

答案 1 :(得分:2)

与SSDMS的解决方案类似,您也可以这样做:

mydict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': 6} for each in mydict['a']+mydict['b']: ....

答案 2 :(得分:1)

您可以使用itertools模块中的chain执行此操作:

In [29]: from itertools import chain

In [30]: mydict = {'a': [1, 2, 3], 'b': [3, 4, 5], 'c': 6}

In [31]: for item in chain(mydict['a'], mydict['b']):
    ...:     print(item)
    ...:         
1
2
3
3
4
5

要仅迭代值,字典中作为list实例的键值只需使用chain.from_iterable

wanted_key = ['a', 'b']        
for item in chain.from_iterable(mydict[key] for key in wanted_key if isinstance(mydict[key], list)):
    #  do something with the item