[英]how to update nested dictionary key in python
我有一本主字典和空白字典,
Dairy_goods = {1:{'item':'Milk','price':2.47,'gst':0.16,'offer':'Yes'},
2:{'item':'Butter','price':4.50,'gst':0.32,'offer':'No',},
3:{'item':'Egg','price':3.40,'gst':0.24,'offer':'No'}}
我已经对它进行了编码,以便按字母顺序排序。
While True:
res = sorted(Dairy_goods.items(), key = lambda x: x[1]['item']) #by name
print("The sorted dictionary by marks is : " + str(res))
输出将是
The sorted dictionary by marks is : [(2, {'item': 'Butter', 'price': 4.5, 'gst': 0.32, 'offer': 'No'}),
(3, {'item': 'Egg', 'price': 3.4, 'gst': 0.24, 'offer': 'No'}),
(1, {'item': 'Milk', 'price': 2.47, 'gst': 0.16, 'offer': 'Yes'})]
正如您所看到的,主键值在排序后被弄乱了,想知道是否有办法更改/更新键名,以便按顺序列出。
#desired output
The sorted dictionary by marks is : [(1, {'item': 'Butter', 'price': 4.5, 'gst': 0.32, 'offer': 'No'}),
(2, {'item': 'Egg', 'price': 3.4, 'gst': 0.24, 'offer': 'No'}),
(3, {'item': 'Milk', 'price': 2.47, 'gst': 0.16, 'offer': 'Yes'})]
谢谢你。
*编辑:我意识到这篇文章的标题可能不符合我的要求,如果你知道,请告诉我我应该如何命名这个问题,谢谢
*编辑:正如 AKS 所提到的,使用 enumerate 效果很好! 但由于我仍然希望将数字的值附加到列表中,例如当我选择选项“1”时,它仍然会给我“牛奶”的键值,因为它是主字典中的第一个键有什么解决办法吗?
#output now
[(1, {'item': 'Butter', 'price': 4.5, 'gst': 0.32, 'offer': 'No'}),
(2, {'item': 'Egg', 'price': 3.4, 'gst': 0.24, 'offer': 'No'}),
(3, {'item': 'Milk', 'price': 2.47, 'gst': 0.16, 'offer': 'Yes'})]
select your input: 1 #user input
how many do you want?: 1 #user input
Milk , {'Quantity': 1, 'Individual price': 2.47, 'total': 2.47, 'GST': 0.16, 'offer': 'Yes'} #output
>>> list(enumerate(sorted(Dairy_goods.values(), key=lambda x: x['item']), start=1))
[(1, {'item': 'Butter', 'price': 4.5, 'gst': 0.32, 'offer': 'No'}),
(2, {'item': 'Egg', 'price': 3.4, 'gst': 0.24, 'offer': 'No'}),
(3, {'item': 'Milk', 'price': 2.47, 'gst': 0.16, 'offer': 'Yes'})]
只需对值进行排序并使用enumerate
。
如果您不需要列表而是 dict,只需将list
替换为dict
。
我仍然希望将数字的值附加到列表中,例如,当我选择选项“1”时,它仍然会给我“牛奶”的键值,因为它是主字典中的第一个键,有没有解决这个问题?
帖子中没有代码显示如何访问这些值。 但是因为您正在获取Milk
,我猜您仍在使用Dairy_goods
来访问该值。 正如我在下面的评论中提到的,您可以做两件事:
Dairy_goods
,这样您就可以保留其余代码,因为您可以使用Dairy_goods[1]
等访问第一个元素。Dairy_goods = dict(enumerate(sorted(Dairy_goods.values(), key=lambda x: x['item']), start=1))
new_dairy_goods
访问该值。new_dairy_goods = dict(enumerate(sorted(Dairy_goods.values(), key=lambda x: x['item']), start=1))
基本上,您有一个要按某些值排序的元组列表。 由于元组是您要排序的“单位”,因此您无法在对元组进行排序时分解每个元组的值。
无论如何,您可以通过以下方式实现预期输出:
x[1]['item']
对元组进行排序enumerate
,正如 AKS 在其他答案中建议的那样你可以这样做。
'item'
对字典的值进行排序enumerate
将序列值分配给已排序的值enumerate
对象转换为列表以获得所需的输出d = {1:{'item':'Milk','price':2.47,'gst':0.16,'offer':'Yes'},
2:{'item':'Butter','price':4.50,'gst':0.32,'offer':'No',},
3:{'item':'Egg','price':3.40,'gst':0.24,'offer':'No'}}
x = list(enumerate(sorted(d.values(), key= lambda x: x['item']), start=1))
print(x)
[(1, {'item': 'Butter', 'price': 4.5, 'gst': 0.32, 'offer': 'No'}), (2, {'item': 'Egg', 'price': 3.4, 'gst': 0.24, 'offer': 'No'}), (3, {'item': 'Milk', 'price': 2.47, 'gst': 0.16, 'offer': 'Yes'})]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.