使用嵌套值项交换键和值

2024-04-29 05:32:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份标准名单

standard = ["Richard","Robert","Nicolas"]

以及别名字典(在本例中为昵称)

^{pr2}$

我想做一个新的字典,我可以把任何别名作为一个键,它将返回标准名称AKA交换键和值

到目前为止我唯一的猜测是

t = {}
aliases = [t.update(zip(v,[k]*len(v))) for k,v in aliases.items()]
aliases = t

有没有一种更简洁易读的方法来做到这一点(我宁愿不使用临时字典t)。


Tags: 名称richard标准字典updateziprobertstandard
3条回答

dict((nick, name) for name, nicks in aliases.iteritems() for nick in nicks)

>>> standard = ["Richard","Robert","Nicolas"] 
>>> aliases = {standard[0]:["Richard","Rick","Dick","Rich"], 
           standard[1]:["Robert","Roberto","Bob"] ,
           standard[2]:["Nicolas","Nick","Nic"] }
>>> def name(nickname):
        return [n for n in aliases if nickname in aliases[n]]

>>> name('Bob')
['Robert']
>>> 

列表理解是很棒的。在

我认为这样更具可读性:

rev_aliases = {}
for name, nick_list in aliases.iteritems():
    for nick in nick_list:
        rev_aliases[nick] = name

如果您喜欢某种形式的生成器表达式,则可以使用以下内容:

Python>;=2.7:

^{pr2}$

Python 2.7:

rev_aliases = dict((nick, name)
                   for name, nick_list in aliases.iteritems()
                   for nick in nick_list)

相关问题 更多 >