• <bdo id='p2DVn'></bdo><ul id='p2DVn'></ul>

    <small id='p2DVn'></small><noframes id='p2DVn'>

    <tfoot id='p2DVn'></tfoot>
    <i id='p2DVn'><tr id='p2DVn'><dt id='p2DVn'><q id='p2DVn'><span id='p2DVn'><b id='p2DVn'><form id='p2DVn'><ins id='p2DVn'></ins><ul id='p2DVn'></ul><sub id='p2DVn'></sub></form><legend id='p2DVn'></legend><bdo id='p2DVn'><pre id='p2DVn'><center id='p2DVn'></center></pre></bdo></b><th id='p2DVn'></th></span></q></dt></tr></i><div id='p2DVn'><tfoot id='p2DVn'></tfoot><dl id='p2DVn'><fieldset id='p2DVn'></fieldset></dl></div>
    <legend id='p2DVn'><style id='p2DVn'><dir id='p2DVn'><q id='p2DVn'></q></dir></style></legend>

        Python:元组/字典作为键、选择、排序

        Python: Tuples/dictionaries as keys, select, sort(Python:元组/字典作为键、选择、排序)

        <small id='cgUbo'></small><noframes id='cgUbo'>

                <legend id='cgUbo'><style id='cgUbo'><dir id='cgUbo'><q id='cgUbo'></q></dir></style></legend>

                  <tbody id='cgUbo'></tbody>
                <i id='cgUbo'><tr id='cgUbo'><dt id='cgUbo'><q id='cgUbo'><span id='cgUbo'><b id='cgUbo'><form id='cgUbo'><ins id='cgUbo'></ins><ul id='cgUbo'></ul><sub id='cgUbo'></sub></form><legend id='cgUbo'></legend><bdo id='cgUbo'><pre id='cgUbo'><center id='cgUbo'></center></pre></bdo></b><th id='cgUbo'></th></span></q></dt></tr></i><div id='cgUbo'><tfoot id='cgUbo'></tfoot><dl id='cgUbo'><fieldset id='cgUbo'></fieldset></dl></div>
                  <bdo id='cgUbo'></bdo><ul id='cgUbo'></ul>
                • <tfoot id='cgUbo'></tfoot>
                  本文介绍了Python:元组/字典作为键、选择、排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

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

                  Suppose I have quantities of fruits of different colors, e.g., 24 blue bananas, 12 green apples, 0 blue strawberries and so on. I'd like to organize them in a data structure in Python that allows for easy selection and sorting. My idea was to put them into a dictionary with tuples as keys, e.g.,

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

                  甚至是字典,例如,

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

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

                  I'd like to retrieve a list of all blue fruit, or bananas of all colors, for example, or to sort this dictionary by the name of the fruit. Are there ways to do this in a clean way?

                  很可能以元组为键的字典不是处理这种情况的正确方法.

                  It might well be that dictionaries with tuples as keys are not the proper way to handle this situation.

                  欢迎所有建议!

                  推荐答案

                  就我个人而言,我喜欢 python 的一件事是 tuple-dict 组合.你在这里实际上是一个二维数组(其中 x = 水果名称和 y = 颜色),我通常是实现二维数组的元组字典的支持者,至少在类似 numpy 的情况下或者数据库不是更合适的.所以简而言之,我认为你有一个很好的方法.

                  Personally, one of the things I love about python is the tuple-dict combination. What you have here is effectively a 2d array (where x = fruit name and y = color), and I am generally a supporter of the dict of tuples for implementing 2d arrays, at least when something like numpy or a database isn't more appropriate. So in short, I think you've got a good approach.

                  请注意,如果不做一些额外的工作,您不能将 dicts 用作 dict 中的键,因此这不是一个很好的解决方案.

                  Note that you can't use dicts as keys in a dict without doing some extra work, so that's not a very good solution.

                  也就是说,您还应该考虑 namedtuple().这样你就可以这样做了:

                  That said, you should also consider namedtuple(). That way you could do this:

                  >>> 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 dict:

                  Now you can use your fruitcount dict:

                  >>> 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 相呼应,要获得一种水果所有颜色的列表,您必须过滤键,即

                  Echoing chmullig, to get a list of all colors of one fruit, you would have to filter the keys, i.e.

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

                  这篇关于Python:元组/字典作为键、选择、排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Initialize Multiple Numpy Arrays (Multiple Assignment) - Like MATLAB deal()(初始化多个 Numpy 数组(多重赋值) - 像 MATLAB deal())
                  How to extend Python class init(如何扩展 Python 类初始化)
                  What#39;s the difference between dict() and {}?(dict() 和 {} 有什么区别?)
                  What is a wrapper_descriptor, and why is Foo.__init__() one in this case?(什么是 wrapper_descriptor,为什么 Foo.__init__() 在这种情况下是其中之一?)
                  Initialize list with same bool value(使用相同的布尔值初始化列表)
                  setattr with kwargs, pythonic or not?(setattr 与 kwargs,pythonic 与否?)
                  <legend id='6eLqy'><style id='6eLqy'><dir id='6eLqy'><q id='6eLqy'></q></dir></style></legend>

                      • <bdo id='6eLqy'></bdo><ul id='6eLqy'></ul>
                          <tbody id='6eLqy'></tbody>

                        <small id='6eLqy'></small><noframes id='6eLqy'>

                      • <tfoot id='6eLqy'></tfoot>
                        <i id='6eLqy'><tr id='6eLqy'><dt id='6eLqy'><q id='6eLqy'><span id='6eLqy'><b id='6eLqy'><form id='6eLqy'><ins id='6eLqy'></ins><ul id='6eLqy'></ul><sub id='6eLqy'></sub></form><legend id='6eLqy'></legend><bdo id='6eLqy'><pre id='6eLqy'><center id='6eLqy'></center></pre></bdo></b><th id='6eLqy'></th></span></q></dt></tr></i><div id='6eLqy'><tfoot id='6eLqy'></tfoot><dl id='6eLqy'><fieldset id='6eLqy'></fieldset></dl></div>