繁体   English   中英

字典理解值排序[重复]

[英]Dictionary Comprehensions Value Sorting [duplicate]

这个问题在这里已经有了答案:

我编写了这段代码作为测试,以便稍后在我正在处理的脚本中实现它。 这个概念很简单,根据用户的选择以不同的方式对字典进行排序。

“a”是默认顺序(字典中数据输入的顺序)。 “b”是默认顺序,但相反。 “c”是默认顺序,但按字母顺序 (AZ)。 “d”是“c”的顺序,但颠倒了(ZA)。

a = {"pfdee": 100, "pafeeg": 1000, "ddsds": 999, "gfgfgh": 10}
b = {i: a[i] for i in reversed(list(a.keys()))}
c = {i: a[i] for i in sorted(list(a.keys()))}
d = {i: a[i] for i in sorted(list(a.keys()), reverse=True)}

print("a: " + str(a))
print("b: " + str(b))
print("c: " + str(c))
print("d: " + str(d))

现在,我想再添加两个订单,即与每个单 object 的数量有关(所以“e”应该从小到大,“f”应该从大到小)。 我做了几次测试,但不幸的是,它们都不成功。 我可以在正常的 for 循环中做到这一点,但如果可能的话,我想保留字典理解。 所以我就应该如何进行征求意见,以便更好地理解。

我指定我使用的是 Python 3.7

您可以对a.items() (键值对)进行排序并将值用作排序标准:

a = {"pfdee": 100, "pafeeg": 1000, "ddsds": 999, "gfgfgh": 10}

e = {k : v for k, v in sorted(a.items(), key = lambda t : t[1])}
f = {k : v for k, v in sorted(a.items(), key = lambda t : t[1], reverse = True)}

print("e: " + str(e))
print("f: " + str(f))

Output:

e: {'gfgfgh': 10, 'pfdee': 100, 'ddsds': 999, 'pafeeg': 1000}
f: {'pafeeg': 1000, 'ddsds': 999, 'pfdee': 100, 'gfgfgh': 10}

在这种情况下,由于您有一个键值元组列表,您可以只使用dict构造函数而不是 dict 理解:

e = dict(sorted(a.items(), key = lambda t : t[1]))
f = dict(sorted(a.items(), key = lambda t : t[1], reverse = True))

sorted 接受一个可选参数,称为 key,因此您可以指定一个 function,它返回一个 integer,通过它对元素进行排序。

e = {i: a[i] for i in sorted(list(a.keys(), key = lambda e: len(e))}
f = {i: a[i] for i in sorted(list(a.keys(), key = lambda e: -len(e))}

尽管我必须警告您,您的代码没有意义,因为字典是映射其值的无序键序列,因此所有这些字典都是相同的。 尝试查看模块 collections 和它包含的 OrderedDict 结构。

如果我不正确理解,这可能会帮助您获得所需的东西。 您是在谈论键中的最小到最大吗? 还是每个键的值从最小到最大? 我的回答针对第一种情况。 请让我知道,以便我可以删除它,因为其他情况已经得到解答。

a = {"pfdee": 100, "pafeeg": 1000, "ddsds": 999, "gfgfgh": 10}
b = {i: a[i] for i in reversed(list(a.keys()))}
c = {i: a[i] for i in sorted(list(a.keys()))}
d = {i: a[i] for i in sorted(list(a.keys()), reverse=True)}
e = {i: a[i] for i in sorted(a.keys(),key=len)}
f = {i: a[i] for i in sorted(a.keys(),key=len,reverse=True)}
print("a: " + str(a))
print("b: " + str(b))
print("c: " + str(c))
print("d: " + str(d))
print("e: " + str(e))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM