我有一本字典,其中的键和值将被交换。例如:
dic = {"indianapolis":"indiana", "columbus":"ohio", "jackson":"mississippi",
"phoenix":"arizona"}
产出应是:
{"indiana":"indianapolis", "ohio":"columbus", "mississippi":"jackson",
"arizona":"phoenix"}
这里是我尝试过的,但是约束条件是只应该使用sorted()
、split()
函数,而不应该使用其他内置函数(比如keys()
、values()
、items()
、lambda
)。不太确定该怎么做。有人能帮忙吗?我对字典很陌生。
def interchange(input_dict):
temp = {}
dic = input_dict
for i in dict:
temp[i[1]] = i[0]
return temp_dic
发布于 2013-12-08 08:05:56
只应使用
.sorted()
、.split()
函数。
使用sorted
和字典理解:
>>> dic = {"indianapolis":"indiana", "columbus":"ohio", "jackson":"mississippi", "phoenix":"arizona"}
>>> {dic[k]:k for k in sorted(dic)}
{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}
sorted
按排序顺序返回字典的键,尽管最终dict的顺序将是任意的。上述代码相当于:
>>> sorted(dic)
['columbus', 'indianapolis', 'jackson', 'phoenix']
>>> new_dic = {}
>>> for k in sorted(dic):
... new_dic[dic[k]] = k
...
>>> new_dic
{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}
更新:
def interchange(input_dict):
return {input_dict[k]:k for k in sorted(input_dict)}
...
>>> interchange(dic)
{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}
发布于 2013-12-08 08:03:54
使用dict理解:
>>> dic = {"indianapolis":"indiana", "columbus":"ohio",
... "jackson":"mississippi", "phoenix":"arizona"}
>>> {dic[key]: key for key in dic}
{'ohio': 'columbus', 'mississippi': 'jackson',
'arizona': 'phoenix', 'indiana': 'indianapolis'}
发布于 2013-12-08 08:06:23
一些不错的选择:
dic = {"indianapolis":"indiana", "columbus":"ohio", "jackson":"mississippi",
"phoenix":"arizona"}
newDict = dict(zip(dic.values(),dic.keys()))
print newDict
输出:
{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}
解释:
zip()
返回一个元组列表(字典),并且zip的参数按顺序反转.
没有python方法的:
dic = {"indianapolis":"indiana", "columbus":"ohio", "jackson":"mississippi",
"phoenix":"arizona"}
newDict = {}
for key, item in dic.iteritems():
newDict.update({item: key})
print newDict
输出:
{'ohio': 'columbus', 'mississippi': 'jackson', 'arizona': 'phoenix', 'indiana': 'indianapolis'}
https://stackoverflow.com/questions/20455477
复制相似问题