首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的多字典排序

python中的多字典排序
EN

Stack Overflow用户
提问于 2021-01-12 21:04:42
回答 3查看 72关注 0票数 0

我有这样的数据结构:

代码语言:javascript
复制
poll = {
  'LINK' : {'MoonRaccoon' : 1, 'TheDirtyTree' : 1},
  'ZRX' : {'MoonRaccoon' : 1, 'Dontcallmeskaface' : 1, 'TheDirtyTree' : 1},  
  'XRP' : {'Dontcallmeskaface' : 1},
  'XLM' : {'aeon' : 1, 'Bob' : 1} 
}

我希望它最终像这样打印,顺序是按请求的人数,然后按字母顺序,然后按用户的字母顺序排列。

代码语言:javascript
复制
!pollresults

ZRX : Dontcallmeskaface, MoonRaccoon, TheDirtyTree
LINK : MoonRaccoon, TheDirtyTree
XLM : aeon, Bob
XRP: Dontcallmeskaface

任何真正擅长分类的人都能帮我做这件事。我对python非常陌生,在编码方面非常生疏。

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-13 02:36:29

这里你得到了一个单线器:

代码语言:javascript
复制
print (sorted(poll.items(), key = lambda item : len(list(item[1].keys())), reverse = True))

输出:

代码语言:javascript
复制
[('ZRX', {'MoonRaccoon': 1, 'Dontcallmeskaface': 1, 'TheDirtyTree': 1}), ('LINK', {'MoonRaccoon': 1, 'TheDirtyTree': 1}), ('XLM', {'aeon': 1, 'Bob': 1}), ('XRP', {'Dontcallmeskaface': 1})]

为了漂亮的印刷:

代码语言:javascript
复制
lst = sorted(poll.items(), key = lambda item : len(list(item[1].keys())), reverse = True)

for elem in lst:
    print (elem[0],":"," ".join(elem[1].keys()))

和因为我真的喜欢单宁,一切都一条龙!

代码语言:javascript
复制
print ("\n".join([" : ".join([elem[0]," ".join(list(elem[1].keys()))]) for elem in sorted(poll.items(), key = lambda item : len(list(item[1].keys())), reverse = True)]))

输出:

代码语言:javascript
复制
ZRX : MoonRaccoon Dontcallmeskaface TheDirtyTree
LINK : MoonRaccoon TheDirtyTree
XLM : aeon Bob
XRP : Dontcallmeskaface
票数 1
EN

Stack Overflow用户

发布于 2021-01-12 21:10:48

字典不能被真正分类,但是为了打印的目的,这是可以做到的。

代码语言:javascript
复制
poll = {
  'LINK' : {'MoonRaccoon' : 1, 'TheDirtyTree' : 1},
  'ZRX' : {'MoonRaccoon' : 1, 'Dontcallmeskaface' : 1, 'TheDirtyTree' : 1},  
  'XRP' : {'Dontcallmeskaface' : 1},
  'XLM' : {'aeon' : 1, 'Bob' : 1} 
}

def print_polls(poll):
    for ticker in sorted(poll, key=lambda t: sum(poll[t].values()), reverse=True):
        print(f"{ticker}: {', '.join(sorted(poll[ticker]))}")

这会给你你想要的输出

票数 2
EN

Stack Overflow用户

发布于 2021-01-13 00:47:40

d

  • sort

  • poll中计数选票,按步骤2的顺序获得poll d

  • 的投票结果,并处理对姓名列表

的排序

代码语言:javascript
复制
d = [[k, len(v)] for k, v in poll.items()]
d.sort(key=lambda name_vote: (-name_vote[-1],name_vote[0]))
pollresults = [name + ' : ' + ', '.join(sorted(poll[name].keys(), key=str.lower)) for name,vote in d]

结果:

代码语言:javascript
复制
>>> pollresults
['ZRX : Dontcallmeskaface, MoonRaccoon, TheDirtyTree', 'LINK : MoonRaccoon, TheDirtyTree', 'XLM : aeon, Bob', 'XRP : Dontcallmeskaface']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65692029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档