【问题标题】:Can we assign 2 types of values to a key in a dictionary [duplicate]我们可以为字典中的键分配两种类型的值吗?
【发布时间】:2018-06-27 23:53:39
【问题描述】:

假设我有一本如下的字典

my_dict = {
'key1' : 'str1',
'key2' : 'str2',
'key3' : 'str3'
}

我想为每个键分配附加值,以便字典的结构如下

key1 : str1, num1
key2 : str2, num2
key3 : str3, num2

是否可以这样做,如果可以,那么我们如何访问单个值。

【问题讨论】:

  • 分配一个列表或元组作为值。 d = {'k1': ['str1', 1]}。通过索引访问,例如d['k1'][0] 产生 str1
  • 使用namedtuple
  • 我不清楚输出应该是什么样子。您能否举例说明您希望输出如何工作(值应该是连接字符串还是要索引字典值甚至索引字典键?)

标签: python dictionary


【解决方案1】:

如果您不需要更改字典中的这些多个值,请使用tuples 作为值:

my_dict = {
    'key1' : ('str1', 56),
    'key2' : ('str2', 78),
    'key3' : ('str3', 89)
}

否则使用lists:

my_dict = {
    'key1' : ['str1', 56],
    'key2' : ['str2', 78],
    'key3' : ['str3', 89]
}

在这两种结构中,访问是相同的:

>>> my_dict['key3']
('str3', 89)
>>> my_dict['key3'][0]
'str3'

但只能使用 lists 进行赋值(因为它们是 mutable 数据结构):

>>> my_dict['key3'][1] = 99
>>> my_dict['key3'][1]
99
>>> my_dict
{'key3': ['str3', 99], 'key1': ['str1', 56], 'key2': ['str2', 78]}

【讨论】:

    【解决方案2】:

    是的,你可以分配一个元组:

    my_dict = {
      'key_0': ('val_0', 'val_1')
      ...
    }
    

    然后像这样访问:

    my_dict['key_0'][0]   # 'val_0'
    

    【讨论】:

      【解决方案3】:

      您可以将值添加为元组或列表,如下所示:

      my_dict = {
      'key1' : [str1, num1],
      'key2' : [str2, num2],
      'key3' : [str2, num2]
      }
      

      这将是执行此操作的列表方式。您可以使用相应的索引访问您的值。

      my_dict['key1'][0] 是字符串,my_dict['key1'][1] 是数字。

      祝你好运!

      【讨论】:

        【解决方案4】:

        如果您想稍后附加,您可以建立列表

        d= {'a':[1], 'b':[10]}
        d['a'].append(2)
        print(d) # {'a': [1, 2], 'b': [10]}
        print(d['a'][1]) # 2
        

        【讨论】:

          【解决方案5】:

          鉴于您的新号码列表,您可以使用zip

          nums = [3, 4, 5]
          my_dict = {
           'key1' : 'str1',
           'key2' : 'str2',
           'key3' : 'str3'
          }
          my_dict = {a:[b, c] for c, [a, b] in zip(nums, my_dict.items())}
          

          输出:

          {'key1': ['str1', 5], 'key2': ['str2', 4], 'key3': ['str3', 3]}
          

          【讨论】:

            猜你喜欢
            • 2013-12-03
            • 1970-01-01
            • 1970-01-01
            • 2014-07-26
            • 2016-06-03
            • 1970-01-01
            • 1970-01-01
            • 2010-10-13
            相关资源
            最近更新 更多