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

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

“ 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))

现在,我想再添加两个与每个单个对象的数量有关的顺序(因此,“ e”应从最小到最大,“ f”应从最大到最小)。 我做了几次测试,但不幸的是,它们没有成功。 我可以在正常的for循环中执行此操作,但如果可能的话,我希望保持字典的理解力。 因此,我寻求有关如何进行的建议,以加深了解。

我指定我正在使用Python 3.7

#1楼 票数:2 已采纳

您可以对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))

输出:

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))

#2楼 票数:1

sorted具有一个称为key的可选参数,因此您可以指定一个函数,该函数返回一个整数,通过该函数可以对元素进行排序。

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))}

尽管我不得不警告您,您的代码没有任何意义,因为字典是映射它们的值的无序键的序列,因此所有这些词典都是相同的。 尝试查看模块集合及其包含的OrderedDict结构。

#3楼 票数:1

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

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))

  ask by BlackFenix06 translate from so

未解决问题?本站智能推荐:

3回复

将str.split()的结果存储到字典中作为列表理解的一部分的最佳方法是什么? [重复]

这个问题已经在这里有了答案: 如何在列表中拆分字符串以在Python 4中 创建键值对 给定以下样本数据: 我想创建一个字典,其中A映射到1,B映射到2,C映射到3。下面的方法有效,但是有重复: value.split()的重复看起来很丑。 有没有
4回复

如何获取字典键组合的唯一值集?

我正在使用 Python 3.7。 我有一个字典列表,例如 如果我想获得单个键的唯一值集,例如“a”,我可以 但是我如何获得键组合的唯一值集,比如“a”和“b”? 在上面的例子中,答案是
1回复

如何将带有值列表的字典展平?

我试图“压平”一个看起来像这样的字典: 我想把它变成这样的格式:
3回复

Range()函数将字典中的整数(值)更改为对象

我想将值作为分配给键的整数,但是当我将整数生成为值时,我创建了一个对象,而不是它。 这是我的代码: 实际结果: 预期结果:
1回复

为什么我的输入键没有从字典中删除?

只是学习用Python编写代码,所以我创建了这个测试词典。 我希望从字典中删除输入,但是每次在pop函数之后打印字典时,它都不会删除键或值。 我正在使用的是Python 3.7.2 Shell 如果我输入一个键(例如2),我希望将该键和值(2:"ten")从字典中删除,那么我希望输出
2回复

如何创建具有公共键的字典

我正在尝试使用键和值创建字典 和价值观。 使用zip函数或使用 for 循环。 输出是。 但是 dict 忽略了公共键的值。 就像它忽略了 1: 'a' 等等。 请告诉我处理它的方法。
1回复

Python 请求模块 - 剥离字典内容

我正在尝试从下面指定的链接调用 Web 请求(可能会略有变化,具体取决于您阅读本文的时间),但我只想要其中的特定部分,全部为一行。 从“build”部分:“++Fortnite+Release-12.50-CL-13193885-Windows”我想保留 ++Fortnite+Release-12.
1回复

使用公共 ID 键合并两个字典列表

我有以下两个字典列表: 本质上,我希望即使在重复的 ID 上也不会丢失数据,因为它们代表不同的事件(有一个单独的 ID,但为了演示问题,不需要)。 如果一个列表中有任何 ID,而另一个列表中没有,则一起忽略该 ID。 理想情况下,我希望得到以下结果(来自两个列表的合并):