有没有办法使此for
和if
单行显示?我需要遍历所有以'a'开头的键的项目
>>> mydict
{'aName': 'Nancy', 'aAge': '25', 'bName': 'Don', 'bNumber': '21'}
>>> for k,v in mydict.items():
... if k.startswith('a'):
... print(k,v)
... # do some processing here
aName Nancy
aAge 25
我认为应该有一种pythonic的方法来做到这一点?像for k,v in mydict.items() with k.startswith('a'):
答案 0 :(得分:1)
您的3班轮很好。至于更短:您几乎已经拥有了-for循环不能有限定词-您要么需要重新限制一下内容:
d = {'aName': 'Nancy', 'aAge': '25', 'bName': 'Don', 'bNumber': '21'}
# restrict the things you loop over by qualifying them as generator
for k,v in (tup for tup in d.items() if tup[0].startswith("a")):
print(k,v)
或者您使用分解和sep="\n"
将打印语句创建为单行:
print( *( f"{k} {v}" for k,v in d.items() if k.startswith("a")), sep="\n")
输出(两种情况):
aName Nancy
aAge 25
答案 1 :(得分:1)
您拥有的完全是Pythonic。这是清晰,明确,易于阅读的,并且是您在软件中看到的非常常见/合理的模式。没有人会被它愚弄/困惑。
要回答您的问题,如果您真的想单行for
/ if
,请执行以下操作:
for k,v in {key: value for key, value in my_dict.items() if key.startswith('a')}.items():
print(k,v)
不幸的是,这与您已有的东西有些混淆(有6个变量,包括一个匿名变量,而不仅仅是3个)。另一个选择是采用相同的想法(先过滤再迭代与再过滤再迭代),并将其分成两行(以提高可读性/语义):
my_dict_startswith_a = {key: value for key, value in my_dict.items() if key.startswith('a')}
for k, v in my_dict_startswith_a.items():
print(k,v)
但是只要坚持拥有的东西即可。看起来不错。
答案 2 :(得分:0)
print([k + " " + v for k, v in mydict.items() if k.startswith('a')])
这称为列表理解。这个里面也有一个if语句