Python 从字典的键和值创建字符串
我需要从字典中创建一个字符串列表,其中字符串是键,值对来自字典,按对的值排序。例如,如果这些是我的键、值对:Python 从字典的键和值创建字符串,python,sorting,dictionary,Python,Sorting,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"] 请注意,如果值相同,它也按字母顺序排序。有没有关于我如何做这件事的建议 我想你只是想: d.items()中k,
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"]
请注意,如果值相同,它也按字母顺序排序。有没有关于我如何做这件事的建议 我想你只是想:
d.items()中k,v的排序([%s%s]%(k,”.join(map(str,v)))
编辑:
如果我了解您的分拣要求:
对d.items()中的k,v进行排序([%s%s]%(k,”.join(map(str,v))),key=lambda x:x.split(“”)[1],reverse=True)
您可以按值按降序对字典进行排序:
>>> 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']
实际上,我忽略了这样一个要求,即如果值相等,您需要按键排序(这只是偶然发生的——字典是无序的)。有几种方法可以解决这个问题:
- 首先按键(非反向)排序,然后按值(反向)排序:
- 或者创建一个自定义类,该类与您需要的完全相同:
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
d.items()
的结果进行排序,您可能会获得更好的性能和更干净的代码。e、 g.[%s%s]%(k,,.join(map(str,v)))为k,v排序(d.items(),key=lambda v:v[1][0])]
。这样可以避免丑陋的拆分操作。
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
>>> 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']