仅打印奇数字典键及其项

时间:2018-09-19 03:35:10

标签: python

我有以下字典,我只需要打印具有奇数(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][:])

3 个答案:

答案 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将返回0False,因此我们可以使用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.