python字典数据类型是否可以包含作为列表元素的键和作为数组元素的值

时间:2018-03-02 02:26:56

标签: python arrays dictionary

如果我犯了任何错误,我是python的新手

我有这样的数据

ENSG1   1:24    2:56    3:47    4:68    5:89
ENSG2   1:25    2:57    3:48    4:69    5:90
ENSG3   1:26    2:58    3:49    4:70    5:91

第一列是{key},其余列是键中的{values} - >字典元素的值对。

这在python中是否可行?

感谢您的建议

3 个答案:

答案 0 :(得分:1)

>>> test = """\
... ENSG1   1:24    2:56    3:47    4:68    5:89
... ENSG2   1:25    2:57    3:48    4:69    5:90
... ENSG3   1:26    2:58    3:49    4:70    5:91"""
>>> result = {}
>>> for row in test.splitlines():
...     key, *values = row.split()
...     result[key] = values
... 
>>> result
{'ENSG1': ['1:24', '2:56', '3:47', '4:68', '5:89'], 'ENSG2': ['1:25', '2:57', '3:48', '4:69', '5:90'], 'ENSG3': ['1:26', '2:58', '3:49', '4:70', '5:91']}

答案 1 :(得分:0)

你的具体例子在上面由@Delirious Lettuce回答,但问题的标题:字典键是否可以作为列表元素,需要进一步澄清。

列表是一个可变对象,如果更改列表索引,它将不会反映在字典键中。 Python将在赋值时创建密钥,而不会指向原始索引。

来自Python Data模型文档:

  

唯一不能作为键接受的值是包含列表或字典或其他可变类型的值,这些值通过值而不是对象标识进行比较,原因是字典的有效实现需要键的哈希值保持不变。用于键的数字类型遵循用于数字比较的常规规则:如果两个数字相等(例如,1和1.0),那么它们可以互换地用于索引相同的字典条目,

答案 2 :(得分:0)

基于上述许多不同网站的答案和建议,我想对我发布的问题提出答案

import numpy as np
keys = np.array(("key1","key2","key3"))
values = np.array([['20','30','40'],['56','76','80',],['57','70','89']])
d = {}
for k in set(keys):
    d[k] = values[k==keys]
print d

结果:

{'key3': array([['57', '70', '89']],
      dtype='|S2')}
{'key3': array([['57', '70', '89']],
      dtype='|S2'), 'key2': array([['56', '76', '80']],
      dtype='|S2')}
{'key3': array([['57', '70', '89']],
      dtype='|S2'), 'key2': array([['56', '76', '80']],
      dtype='|S2'), 'key1': array([['20', '30', '40']],
      dtype='|S2')}

感谢所有

提供的支持