假设我有一个这样的字典:
my_dict = {2:3, 5:6, 8:9}
有没有一种方法可以交换键和值,得到以下结果:
{3:2, 6:5, 9:8}
假设我有一个这样的字典:
my_dict = {2:3, 5:6, 8:9}
{3:2, 6:5, 9:8}
对于Python 3:
my_dict2 = {y: x for x, y in my_dict.items()}
对于Python 2,您可以使用:
my_dict2 = dict((y, x) for x, y in my_dict.iteritems())
.iteritems()
在 Python 3.x 上无效。 - JBernardo{(y, x) for x, y in dic_cols_w.items()}
会返回一个集合,而不是一个字典。你仍需要将其包装在 dict(...)
中才能获得一个字典。 - tsando{y:x ...
。 - GWWitem()
而不是iteritems()
,即my_dict2 = {y:x for x,y in my_dict.items()}
。来源:https://dev59.com/iHRB5IYBdhLWcg3w3K8J#483833 - Milanmy_dict = { my_dict[k]:k for k in my_dict}
试试这个:
my_dict = {2:3, 5:6, 8:9}
new_dict = {}
for k, v in my_dict.items():
new_dict[v] = k
使用这个代码(稍作修改)来自Python反转/倒置映射的被接受答案:
dict((v,k) for k, v in my_dict.iteritems())
flipped_dict = dict(zip(my_dict.values(), my_dict.keys()))
iterkeys
和itervalues
。 - GWWreversed_dict = dict(map(reversed, original_dict.items()))
from itertools import count
dict([(a,[list(d.keys())[i] for i,j in zip(count(), d.values())if j==a in set(d.values())])
我相信有更好的方法(非列表推导式),但是之前的答案存在问题,所以我提供了我的解决方案,以防其他人有类似的用例。
附注:不要期望在原始字典更改后,字典保持整齐!这种方法只能在静态字典上使用一次 - 你已经被警告了!
RvsD = dict()
for k,v in MyDict.iteritems():
RsvD.setdefault(v, []).append(k)
from collections import defaultdict
def reverse_dict(data: dict) -> dict:
rd = defaultdict(list)
for k, v in data.items():
rd[v].append(k)
return rd
if __name__ == "__main__":
from collections import Counter
data = "aaa bbb ccc ddd aaa bbb ccc aaa"
c = Counter(data.split())
print(c)
# Counter({'aaa': 3, 'bbb': 2, 'ccc': 2, 'ddd': 1})
rd = reverse_dict(c)
print(rd)
# defaultdict(<class 'list'>, {3: ['aaa'], 2: ['bbb', 'ccc'], 1: ['ddd']})
您可以这样做:
功能:
def inverse_dict(my_dict):
updated_dict = {}
for i in my_dict:
updated_dict[my_dict[i]] = [i]
return updated_dict
Main():
def main():
year = {'day': 15, 'month': 3, 'year': 2019}
print(inverse_dict(year))
if __name__ == "__main__":
main()
{15: ['day'], 3: ['month'], 2019: ['year']}
my_new_dict = dict(zip(my_dict.values(), my_dict.keys()))
这个怎么样? - nauer