簡體   English   中英

2個要排序的字典的列表又回到2個列表(多個鍵值)

[英]2 Lists to Sorted Dictionary back to 2 Lists (Multiple Key Values)

我正在嘗試獲取兩個列表:一個包含日期,一個包含樂譜,然后將它們壓縮到字典中,然后按鍵值排序,然后將它們返回兩個列表(仍在排序中)。 我遇到的問題是字典不保留多個鍵值。 我的代碼如下:

date = ['2015/07/13', '2015/07/13', '2015/07/07', '2015/07/06',...] 
#there are 59 of these dates
Scores = [9.5, 13.9, 15.5, 12.9 .... ] #There are 59 of these scores
dictionary = dict(zip(date, Scores)) 
d = sorted(dictionary.items()) 
dte = []
scr = []
for i in d: 
    dte.append(i[0]) 
    scr.append(i[1])

但是,當我打印出這些列表時,長度僅為24,而不是應該的59。 多個相同的鍵不會退出。 我想知道是否有一種簡單的方法可以將所有59個排序后的元素重新放入兩個列表中。 我看了一些其他類似的python答案,但沒有一個對我有用。 理想情況下,我不希望為日期創建對象(除非這是最簡單的方法),但是當我嘗試這樣做時,我總是會出錯。 另外,我使用的是Python 2.7。

date, Scores = zip(*sorted(zip(date, Scores)))

字典不支持相同鍵的多個副本。 您的密鑰應該是唯一的。 實現此目的的一種方法是使鍵成為您的日期和分數的元組,除非您在同一天獲得相同的分數。 在這種情況下,您可以添加第三個列表,編號為0到58,並在排序時將其用作第三個元素(使其成為三元組而不是元組)作為決勝局。

在這種情況下使用列表可能更有意義:

dates = ['2015/07/13', '2015/07/13', '2015/07/07', '2015/07/06'] 
scores = [9.5, 13.9, 15.5, 12.9] 

ldates_scores = zip(dates, scores)

dte = sorted(ldates_scores)
scr = sorted(ldates_scores, key=lambda x: x[1])

print dte
print scr
print

for date,score in dte:
    print "Date: %-10s   Score: %d" % (date, score)

print

for date,score in scr:
    print "Date: %-10s   Score: %d" % (date, score)

輸出是兩個列表,第一個列表按日期排序(因為您使用的是YYYY / MM / DD),第二個列表按分數排序。 我把兩雙放在一起。 輸出如下:

[('2015/07/06', 12.9), ('2015/07/07', 15.5), ('2015/07/13', 9.5), ('2015/07/13', 13.9)]
[('2015/07/13', 9.5), ('2015/07/06', 12.9), ('2015/07/13', 13.9), ('2015/07/07', 15.5)]

Date: 2015/07/06   Score: 12
Date: 2015/07/07   Score: 15
Date: 2015/07/13   Score: 9
Date: 2015/07/13   Score: 13

Date: 2015/07/13   Score: 9
Date: 2015/07/06   Score: 12
Date: 2015/07/13   Score: 13
Date: 2015/07/07   Score: 15

字典中的鍵將是唯一的,因此您每個日期只捕獲一個項目。 不需要dict ... zip將返回一個元組,然后將其排序。

 z = zip(date, Scores)
 sorted(z, key=lambda val: val[1], reverse=True)

暫無
暫無

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

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