当前位置: 首页 > 面试题库 >

Python:将元组/字典作为键,进行选择,排序

夏侯昊明
2023-03-14
问题内容

假设我有大量不同颜色的水果,例如24个蓝色香蕉,12个绿色苹果,0个蓝色草莓等等。我想将它们组织成Python的数据结构,以便于选择和排序。我的想法是将它们放入以元组为键的字典中,例如,

{
    ('banana',    'blue' ): 24,
    ('apple',     'green'): 12,
    ('strawberry','blue' ): 0,
    # ...
}

甚至字典,例如

{
    {'fruit': 'banana',    'color': 'blue' }: 24,
    {'fruit': 'apple',     'color': 'green'}: 12,
    {'fruit': 'strawberry','color': 'blue' }: 0,
    # ...
}

例如,我想检索所有蓝色水果或所有颜色的香蕉的列表,或按水果名称对字典进行排序。有没有办法做到这一点?

用元组作为键的字典可能不是处理这种情况的 正确 方法。

欢迎所有建议!


问题答案:

就个人而言,我最喜欢python的一件事是tuple-dict组合。您在这里拥有的实际上是一个2d数组(其中x =水果名称,y
=颜色),而且我通常是实现2d数组的元组字典的支持者,至少在诸如之类numpy的数据库不适合使用时。简而言之,我认为您有一个很好的方法。

请注意,如果不做一些额外的工作,就不能将字典用作字典中的键,因此这不是一个很好的解决方案。

也就是说,您还应该考虑namedtuple()。这样,您可以执行以下操作:

>>> from collections import namedtuple
>>> Fruit = namedtuple("Fruit", ["name", "color"])
>>> f = Fruit(name="banana", color="red")
>>> print f
Fruit(name='banana', color='red')
>>> f.name
'banana'
>>> f.color
'red'

现在您可以使用fruitcount字典:

>>> fruitcount = {Fruit("banana", "red"):5}
>>> fruitcount[f]
5

其他技巧:

>>> fruits = fruitcount.keys()
>>> fruits.sort()
>>> print fruits
[Fruit(name='apple', color='green'), 
 Fruit(name='apple', color='red'), 
 Fruit(name='banana', color='blue'), 
 Fruit(name='strawberry', color='blue')]
>>> fruits.sort(key=lambda x:x.color)
>>> print fruits
[Fruit(name='banana', color='blue'), 
 Fruit(name='strawberry', color='blue'), 
 Fruit(name='apple', color='green'), 
 Fruit(name='apple', color='red')]

与chmullig相呼应,要获得一个水果的所有颜色的列表,您必须过滤键,即

bananas = [fruit for fruit in fruits if fruit.name=='banana']


 类似资料:
  • 问题内容: 我有一个字典,其中每个键都引用一个int值。根据值将键排序到列表中的最佳方法是什么? 问题答案: mydict = {‘a’:1,’b’:3,’c’:2} >>> sorted(mydict, key=lambda key: mydict[key]) [‘a’, ‘c’, ‘b’]

  • 问题内容: 如果我创建一个使用整数作为键的Python字典,是否可以安全地假设对dict进行迭代将根据键值按顺序检索项目? 即会 总是导致按键值顺序打印列表? 问题答案: 简而言之,没有。我敢打赌,您注意到字典将键的哈希用作数组的索引,并且由于int哈希到它们自己的值,因此您推断出,如果插入的值的键是整数,则插入的值将按键顺序结束。尽管该语句的前两个部分是正确的,但即使是未记录的副作用,该推论也不

  • 本文向大家介绍python对字典进行排序实例,包括了python对字典进行排序实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python对字典进行排序的方法,是非常实用的技巧。分享给大家供大家参考。 具体实现方法如下: 程序运行结果为: 希望本文所述对大家Python程序设计的学习有所帮助。

  • 问题内容: 仍在学习python(最后!),还不能完全绕过这个问题。我想做的是使用列表中的第三项按值对列表字典进行排序。当值只是一个数字或字符串时,按值对字典排序很容易,但是这个列表让我感到困惑。 例: 我希望能够按每个列表中第三个值的顺序遍历字典,在这种情况下为9、3、11。 非常感谢您的帮助! 问题答案: 这是执行此操作的一种方法: 该参数的的功能,可以让您导出列表中的每个元素的排序键。 要遍

  • 问题内容: Python中是否有一种方法可以序列化使用元组作为键的字典: 只需使用json.dumps(a),就会产生: 问题答案: 您不能将其序列化为json,json对于什么算作dict键要比python灵活得多。 您可以将映射转换为键,值对的序列,如下所示:

  • 问题内容: 对于元组, 返回 有没有一种好的方法(交换键和值)? 最终,我希望能够返回给定或给定,也许转换为字典不是最好的方法。 问题答案: 尝试: