繁体   English   中英

字典理解值排序[重复]

Dictionary Comprehensions Value Sorting [duplicate]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

“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

3 个回复

您可以对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))
1 按值对字典排序[重复]

这个问题已经在这里有了答案 : 2年前关闭。 如何按值对字典排序? (34个答案) 如果满足以下条件,请考虑字典“ a”: 我想按其键值对字典进行排序,例如: 我想知道是否可以 ...

2 按值对字典排序[重复]

这个问题在这里已有答案: 按值 2答案 排序字典 我正在寻找一个简单的解决方案,我可以用它按值排序字典,我不满足于我发现的东西,所以我编写了这两个函数来排序字典升序和降序。 我不认为它们是完美的,因此欢迎改进。 它们是用VB.Net编写的,并使用中间字典。 ...

3 按值对字典排序[重复]

这个问题已经在这里有了答案: 您如何按值对字典排序? 18个答案 我想按值排序字典。 在Mono API中似乎不存在通常在.Net中完成的方式。 是否有任何特定的API调用,或者我应该自己做? 谢谢 ...

2013-03-05 11:59:41 2 1499   c#/ mono
4 可以在字典理解期间过滤重复值吗?

我正在创建一个以索引为键的随机坐标字典,并且坐标必须是唯一的。 我知道我可以在创建字典后返回并过滤字典键中的重复项,但是是否可以确保在通过理解创建字典的过程中没有重复项? 在伪代码中,我想做类似的事情: 但这在赋值之前引用了字典 d。 明确地说,我是通过理解创建字典,而不是修改现有字典。 ...

6 如何按字典值对列表排序? [重复]

这个问题已经在这里有了答案: 对列表 1答案中的 字典元素进行排序 我有一个带有字典的数组,每个字典都具有相同的结构。 如何按字典中的特定键排序? 例 我想按等级订购 ...

8 将字典值按降序排序[重复]

这个问题在这里已经有了答案: 如何按值对字典进行排序? (19 个回答) 去年关闭。 我的任务: 从用户那里获取字符串找出字符串中每个字符重复的次数找到重复最少的两个字符,将它们的频率相加,并将它们与它们的频率总和相加将此新总和重新添加到列表中,无论它现在是 go,更高重复这些步骤,直到你有一 ...

2020-05-11 02:17:33 1 58   c#
9 根据列表对字典的值排序[重复]

这个问题已经在这里有了答案: 根据另一个列表中的值对列表进行排序? 14个答案 我想基于列表之一对字典(列表)的值进行排序。 例如说我有字典: 我想根据与AttrA关联的值对此进行排序,例如: 先感谢您! ...

暂无
暂无

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

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