我有以下字典,我只需要打印具有奇数(1、3 ...)的字典。我将如何去做?
zen = {
1: 'Beautiful is better than ugly.',
2: 'Explicit is better than implicit.',
3: 'Simple is better than complex.',
4: 'Complex is better than complicated.',
5: 'Flat is better than nested.',
6: 'Sparse is better than dense.',
7: 'Readability counts.',
8: 'Special cases aren't special enough to the rules.',
9: 'Although practicality beats purity.',
10: 'Errors should never pass silently.'
}
到目前为止,我有:
for c in zen:
print (c , zen[c][:])
答案 0 :(得分:3)
如果您的密钥是数字:
for i in range(1,len(zen),2):
print(zen[i])
它从1开始,然后以2为步长,所以我只会赔率
另一种较短的方法是列表理解,但是,这确实有点不寻常,因为您实际上不需要列表。
[print(zen[i]) for i in zen if i%2==1]
答案 1 :(得分:0)
假设您的密钥是整数,则可以遍历这些密钥并删除您不感兴趣的密钥:
for key in zen.keys(): # iterate over all keys of zen
if key % 2: # if reminder of dividing by 2 is non-zero, this is True
print(zen[key]) # print value of zen[key]
事实上,字典的迭代会迭代其键,因此:
for key in zen: # iterate over all keys of zen
if key % 2: # if reminder of dividing by 2 is non-zero, this is True
print(zen[key]) # print value of zen[key]
现在请注意,dict
实际上并不保证任何特定的顺序。因此,如果您希望按数字键排序的顺序打印值:
for key in sorted(zen):
...
当我们将dict
传递给sorted()
时,我们得到zen
的列表被视为可迭代的(即其键的排序列表)。
您可以使用生成器表达式来压缩此a。如果要对它们进行排序,可以将sorted()
放在生成器周围:
for key in (k for k in zen if k % 2):
print(zen[key])
或者,如果您希望对它们进行排序,可以将sorted()
放在zen
周围:
for value in (zen[k] for k in zen if k % 2):
print(value)
夫妇旁注:
您的示例zen
的字符串文字残破:'Special cases aren't special enough to the rules.'
如果包含单引号,请在外部使用双引号(或转义该引号):"Special cases aren't special enough to the rules."
或{{1} }。下一个在语法上不是错误的,但是会被linter标记。通常,左缩进对齐到行文本的开头,而不是该行后面的字符(例如'Special cases aren\'t special enough to the rules.'
)。
当然应该提到,这是一堆奇怪的数据。如果应该将其作为索引列表,那么:
会更有意义并且更易于使用,因为您还可以切片。我想,如果您知道键之间没有空格,可以使用sorted选项,那么您仍然可以做到这一点(在这种情况下,假设第一个键是奇数),但这还不止于此:
list
答案 2 :(得分:0)
偶数% 2
将返回0
,False
,因此我们可以使用if i % 2
,所有赔率均返回一个值,该值的值为True
>
[print(zen[i]) for i in zen if i % 2]
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 odd.py Beautiful is better than ugly. Simple is better than complex. Flat is better than nested. Readability counts. Although practicality beats purity.