簡體   English   中英

展平字典

[英]Flattening a dictionary

在這個 function 中,我試圖創建一個列表,其中包括字典的鍵乘以它們映射到的值,值是非負 integer。 我的代碼給了我我正在尋找的東西,但將鍵的每個字符(它們是字符串)視為單獨的而不是一個字符串,即 {'APPLE': 2} --> ['A', 'P', ' P', 'L', 'E', 'A', 'P', 'P', 'L', 'E'] 而不是 ['APPLE', 'APPLE'] 這是我的代碼:

def flatten_dict(d):
    flattened_dict = []
    for key in d:
        flattened_dict += flatten_lists(key)*d[key]
    return flattened_dict

謝謝大家的幫助

您想遍歷所有字典鍵值對和 append 每個value次到新列表。 dict.items()也是一種使這更簡潔的好方法。

flattened_list = []

for k,v in d.items():
    for _ in range(v):
        flattened_list.append(k)

您當前擁有單詞級別的鍵,您需要先將鍵壓平到字符級別。 實現這一目標的一種方法是創建一個新的字典/哈希表來計算單詞中每個字符的出現次數,然后在該新字典上使用您當前的代碼。

這應該會有所幫助,而不是相乘,它會連接字符串,我迭代了這個數字:

flattenset = {'APPLE': 2, 'WHAT': 3}
flattenlist = []
for item in flattenset:
  for x in range(flattenset[item]):
    flattenlist.append(item)

如果我理解正確,那么此代碼會將您的字典value時間的keys放入列表中。

def flatten_dict(d):
    flattened_dict = []
    for key, value in d.items():
        flattened_dict.extend([key for _ in range(value)])
    return flattened_dict


print(flatten_dict({"Apple": 2,
                    "Pear": 3,
                    "Nuts": 0}))

輸出: ['Apple', 'Apple', 'Pear', 'Pear', 'Pear']

這是使用列表理解的單行答案:

a = {'APPLE':2, "Orange": 3}

# extract the key and values from a.items() and then repeat it 'n' times
output = [key for key, value in a.items() for n in range(value)]

output

這將返回:

['APPLE', 'APPLE', 'Orange', 'Orange', 'Orange']

分解理解:這會從字典中提取每個鍵、值對並返回鍵

key for key, value in a.items()

然后我們按值重復鍵

for n in range(value)

注意: n並沒有真正使用,甚至可以用_代替以表示丟棄值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM