【问题标题】:If in python dictionary, multiple keys are assign to a value then how to get value by using one of the key? [duplicate]如果在python字典中,将多个键分配给一个值,那么如何使用其中一个键来获取值? [复制]
【发布时间】:2013-12-08 19:32:43
【问题描述】:

d = dict({('a','b'):1}) 那么如何通过使用 d.get('a') 或 d.get('b') 而不是 d.get(('a','b')) 来获得价值

>>> d=dict({('a','b'):1})
>>> d.get('a')  // should return value as 1
>>> d.get('b')  // should return value as 1
>>> d.get(('a','b'))
1
>>> 

【问题讨论】:

  • 字典不是这样工作的。您可以在每个键下分别存储相同的值吗?
  • 您必须创建自己的数据类型才能执行此类操作。字典只是将与您在存储值时使用的键关联的值返回给您。

标签: python


【解决方案1】:

您可以创建一个类似于 this question 中的部分匹配函数,但比它更简单。

def partial_match(d, part_key):
    for key, value in d.items():
        if part_key in key:
            return value

>>> partial_match(d, 'a')
1

【讨论】:

    【解决方案2】:

    您可以创建一个从dict 派生的专用数据结构:

    >>> class MyDict(dict):
    ...     def __init__(self, *args):
    ...         if args and type(args[0]) is dict:
    ...             for k, v in args[0].iteritems():
    ...                 self.__setitem__(k, v)
    ...         dict.__init__(self, *args)
    ...     def __setitem__(self, keys, val):
    ...         dict.__setitem__(self, keys, val)
    ...         if type(keys) is tuple:
    ...             for k in keys:
    ...                 self.__setitem__(k, val)
    ... 
    >>> d=MyDict({('a','b'):1})
    >>> print d.get('a')
    1
    >>> print d.get('b')
    1
    >>> print d.get(('a','b'))
    1
    >>> 
    

    这会按照@Thrustmaster 的建议在字典中创建新条目。

    另一种方法是创建一个“部分匹配”函数,正如@Stuart 所提议的那样,它使用更少的内存,因为条目不会重复,但是使用更多的计算,因为它需要遍历所有键,从而有效地使键散列无用。

    【讨论】:

      【解决方案3】:

      正如 cmets 中所指出的,字典只是一个键值映射。你给它一个键,它会返回一个唯一可识别的值。

      为了能够使用元组中的任何元素从dict 中获取值,您需要使用类似以下的内容:

      >>> def updateDict(d, obj):
      ...     for key, value in obj.items():
      ...         for k in key:
      ...             d[k] = value
      ... 
      >>> res = {}
      >>> updateDict(res, {('a','b'):1})
      >>> res
      {'a': 1, 'b': 1}
      >>> res['a']
      1
      >>> res['b']
      1
      

      请注意,上面的代码只是为元组中的每个元素多次插入值。

      【讨论】:

        【解决方案4】:

        您可以使用原始字典创建您想要的字典:

        d1 = dict({('a','b'):1})
        
        # creates {'a':1, 'b':1 }
        d2 = {x:v for k, v in d1.items() for x in k}
        
        print d2.get('a')  # prints 1
        print d2.get('b')  # prints 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-12
          • 1970-01-01
          • 1970-01-01
          • 2021-07-12
          • 2021-03-04
          • 2020-03-01
          • 1970-01-01
          相关资源
          最近更新 更多