日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中字典的键是唯一的吗_在python3中反转字典中的键和值(值不唯一)

發布時間:2024/7/23 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中字典的键是唯一的吗_在python3中反转字典中的键和值(值不唯一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我知道當值是唯一的時,如何簡單地在字典中反轉鍵和值.

但是當值不唯一時如何反轉.

根據要求,如果值出現不止一次,我需要使用set來將它們組合在一起.

防爆.輸入d = {‘a’:1,’b’:2,’c’:1,’d’:2}輸出d = {1,{‘a’,’c’},2,{‘b’ ,’C’}}

我在下面編寫了相當愚蠢的代碼,但因為我只創建了一個集合,因此所有顯示多次的值都在該集合中.

def change(d):

inverted_l = list(map(lambda t:(t[1],t[0]), d.items()))

store_key = [] #for store the key to check if value appear more than one

new_d = {}

x = set()

for i in range(len(inverted_l)):

store_key.append(inverted_l[i][0])

for i in range(len(store_key)):

if store_key.count(store_key[i])> 1:

x.add(inverted_l[i][1]) #I think the problem is I need create set

#each time, but I don't know how to do that

new_d[store_key[i]] = x

else:

new_d[store_key[i]] = inverted_l[i][1]

return new_d

print(sorted(change({'a':1, 'b':2, 'c':1,'d':2}).items()))

我錯誤的輸出是[(1,{‘c’,’d’,’b’,’a’}),(2,{‘c’,’d’,’b’,’a’})]但是我需要[(1,{‘a’,’c’}),(2,{‘b’,’d’})]

補充:我嘗試你的代碼,但是當我測試print時發生錯誤(sorted(invert_dict({‘a’:1,’b’:2,’c’:1}).items()))

我希望我的結果是[(1,{‘a’,’c’}),(2,’b’)]

我是python的新手,謝謝你的幫助和時間!

def invert_dict(d):

result = {}

for k in d:

if d[k] not in result:

result[d[k]] = set()

result[d[k]].add(k)

return {k: d[k] if len(d[k])>1 else d[k].pop() for k in d}

Traceback (most recent call last):

File "U:\test.py", line 9, in

print(sorted(invert_dict({'a':1, 'b':2, 'c':1}).items()))

File "U:\test.py", line 7, in invert_dict

return {k: d[k] if len(d[k])>1 else d[k].pop() for k in d}

File "U:\test.py", line 7, in

return {k: d[k] if len(d[k])>1 else d[k].pop() for k in d}

TypeError: object of type 'int' has no len()

解決方法:

我很確定你的意思是所需的輸出不是設定的

d = {1,{'a','c'},2,{'b','c'}}

而是字典

d = {1:{'a','c'}, 2:{'b','c'}}

只需仔細檢查一下:-).

無論如何,我會這樣做:

import collections

def invert_dict(d):

result = collections.defaultdict(set)

for k in d:

result[d[k]].add(k)

return dict(result)

如果dict子類defaultdict正常,則返回可以簡化為返回結果 – 如果規范非常嚴格,則只需要將其轉換為dict.

我想下一步可??能是“oops,不允許導入”禁止集合.defaultdict,所以我預計 – 在這種情況下,請改為(例如)

def invert_dict(d):

result = {}

for k in d:

if d[k] not in result:

result[d[k]] = set()

result[d[k]].add(k)

return result

補充:顯然最新版本是至關重要的(OP當然“忘記”首先添加“無導入”約束 – 為什么他們繼續對我這樣做?!它會花費他們任何東西來揭示所有的限制從他們的Qs開始前面?!?!?!!)但是需要進行調整 – 單例集需要轉換成他們唯一元素的非集合(一個可怕的,可怕的,不好的規范,使得結果字典幾乎無法使用,并且讓我強烈希望對那些似乎相信制作令人作嘔的糟糕規格改善他們的教學的沒有好詞的人有一些尖銳的話語,但是,這是另一種咆哮).

無論如何,最好是添加一個后處理步驟:

def invert_dict(d):

result = {}

for k in d:

if d[k] not in result:

result[d[k]] = set()

result[d[k]].add(k)

return {k: d[k] if len(d[k])>1 else d[k].pop() for k in d}

沒有什么比這更難了:只需將“解開”單件套裝設置為帶有彈出的一個項目. (接下來是什么 – 另一個愚蠢的任意約束的遲來的啟示,例如“no if / else表達式”?! – )

添加(保留上面的錯誤代碼):需要在return語句中清楚地使用結果而不是d!即最后一行必須是

return {k: result[k] if len(result[k])>1 else result[k].pop() for k in result}

標簽:python,python-3-x,dictionary,duplicates,key-value

來源: https://codeday.me/bug/20190830/1766078.html

總結

以上是生活随笔為你收集整理的python中字典的键是唯一的吗_在python3中反转字典中的键和值(值不唯一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。