首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python字典枚举循环到键/值

Python字典枚举循环到键/值
EN

Stack Overflow用户
提问于 2018-08-06 03:02:00
回答 2查看 121关注 0票数 2

我是编程新手,仍然在尝试识别这里的逻辑。

我正在使用python-gnupg模块。有一个函数"list_keys()“,我想它会返回一个字典列表。

代码语言:javascript
复制
>>> gpg.list_keys()
[{'type': 'pub', 'trust': '-', 'length': '4096', 'algo': '1', 'keyid': '1234', 'date': '1234', 'expires': '', 'dummy': '', 'ownertrust': '-', 'sig': '', 'uids': ['john doe <john@doe.com>'], 'sigs': [], 'subkeys': [['1234', 'e', '1234']], 'fingerprint': 'abc1234'}]

我遍历并枚举该列表:

代码语言:javascript
复制
for c, key in enumerate(all_keys):
    print('{}. {}'.format(c, key['uids']))

# Loop returns
0. ['jane doe jane@doe.com']
1. ['jane doe jane@doe.com']

现在我希望接受数字输入,并将其转换为与其关联的键/uid:

代码语言:javascript
复制
choice = int(input("Choose key: "))
# How do I translate from enumerated number list to its key?

# What does this do?
if choice in gpg.list_keys():
    choice = all_keys[choice][key]

我需要让循环为每个枚举结果生成一个列表吗?我不确定哪些是正确的问题,也不完全掌握这里的逻辑。

目标是输入一个数字,将该数字转换为user-id,并检查该user-id是否存在于字典中。

非常感谢您的指导。我应该问些什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-06 03:18:13

由于您已经标记了Python3.6,因此我不建议依赖于调用之间的字典顺序相同。您可以将您的编号作为另一个字典映射到GPG键,因为dict有一个constructor from an iterable of pairs,所以这非常简单:

代码语言:javascript
复制
enumerated_keys = dict(enumerate(all_keys))  # {0: {'type': 'pub', ...}, 1: {'type': 'pub', ...}}
print('\n'.join('{}. {}'.format(c, k['uids']) for c, k in enumerated_keys.items()))  # matches your output format
choice = int(input("Choose key: "))
try:
    print(enumerated_keys[choice])
except KeyError:
    print("Invalid option!")

我认为这里的主要思想是首先创建映射"user choice -> GPG key",然后才将其呈现给用户。在您的代码中,您没有保存来自enumerate anywhere的结果,这显然使以后很难使用它。

票数 1
EN

Stack Overflow用户

发布于 2018-08-06 03:36:14

我修改了代码,以便它对我有意义(如果我正确理解了问题的话):

代码语言:javascript
复制
all_keys = gpg.list_keys()

for c, key in enumerate(all_keys):
    print('{}. {}'.format(c, key['uids']))

choice = int(input("Choose key: "))

# What does this do?
if choice in all_keys:
    choice = all_keys[choice]['keyid']

choise是用户提供的任何可能的整数。要做的第一件事是验证choice可以很好地作为列表all_keys的索引

if内的第二行接受相应的字典all_keys[choice]={'type': 'pub', 'trust': '-', 'length' ...},并在此字典中接受关键字keyid的值。例如,choice将是id 1234

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51697398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档