簡體   English   中英

根據字典的鍵和值創建字符串

[英]Creating a string from the keys and values of a dictionary

我需要從字典中創建一個字符串列表,其中的字符串是鍵,字典中的值對,按該對的值排序。 例如,如果這些是我的鍵值對:

d = {'AAA': [0, 0, 1], 'BBB': [0, 1, 0], 'CCC': [0, 0, 1], 'DDD': [3, 1, 0]}

我需要退貨:

["DDD 3 1 0", "BBB 0 1 0", "AAA 0 0 1", "CCC 0 0 1"]

請注意,如果值相同,則也將按字母順序排序。 關於如何執行此操作的任何建議?

您可以按以下值對字典進行降序排列:

>>> sorted_d = sorted(d.items(), key=lambda x: x[1], reverse=True)

然后在列表理解中格式化“按規格”項目:

>>> ['{k} {v[0]} {v[1]} {v[2]}'.format(k=k, v=v) for k, v in sorted_d]
['DDD 3 1 0', 'BBB 0 1 0', 'AAA 0 0 1', 'CCC 0 0 1']

我實際上錯過了要求在鍵等於鍵的情況下排序的要求(這是偶然發生的-字典是無序的)。 有幾種解決方法:

  • 首先按鍵排序(不反向),然后按值排序(反向):

     >>> from operator import itemgetter >>> sorted_d = sorted(d.items(), key=itemgetter(0)) >>> sorted_d = sorted(sorted_d, key=itemgetter(1), reverse=True) >>> ['{k} {v[0]} {v[1]} {v[2]}'.format(k=k, v=v) for k, v in sorted_d] ['DDD 3 1 0', 'BBB 0 1 0', 'AAA 0 0 1', 'CCC 0 0 1'] 
  • 或創建一個自定義類,將其完全按照您的需要進行比較:

     class Compare(object): def __init__(self, key_value_pair): self.data = key_value_pair def __lt__(self, other): key1, value1 = self.data key2, value2 = other.data if value1 == value2: return key1 < key2 else: return value1 > value2 

    其余的保持大致相同,除了在比較器中烘焙的reverse=True部分:

     >>> sorted_d = sorted(d.items(), key=Compare) >>> ['{k} {v[0]} {v[1]} {v[2]}'.format(k=k, v=v) for k, v in sorted_d] ['DDD 3 1 0', 'BBB 0 1 0', 'AAA 0 0 1', 'CCC 0 0 1'] 

我想您只想要:

sorted(["%s %s" % (k, ' '.join(map(str, v))) for k, v in d.items()])

編輯:

如果我了解您的排序要求:

sorted(["%s %s" % (k, ' '.join(map(str, v))) for k, v in d.items()], key=lambda x: x.split(' ')[1], reverse=True)

暫無
暫無

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

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