Python通过其中一个属性获取列表中的行

时间:2015-11-30 15:13:50

标签: python list get

所以我得到了这个列表对象,它看起来像:

[['String1', integer1], ['String2', integer2], ['String3', integer3], ['String4', integer4]]

我想通过整数值得到'String1',而不是为此创建一个新方法。是否有一种优雅的方式来做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用列表理解:

>>> seq = [['String1', 4], ['String2', 8], ['String3', 15], ['String4', 8]]
>>> result = [s for s, i in seq if i == 8]
>>> print result
['String2', 'String4']

或者,如果您可以控制数据结构的格式,我建议使用字典。然后获取字符串很简单:

>>> d = {8: ['String2', 'String4'], 4: ['String1'], 15: ['String3']}
>>> print d[8]
['String2', 'String4']

首先将数据转换为该格式非常简单,但我认为你不能在一行中干净利落地完成。

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for s, i in seq:
...     d[i].append(s)
...
>>> print d
defaultdict(<type 'list'>, {8: ['String2', 'String4'], 4: ['String1'], 15: ['String3']})

或者

>>> d = {}
>>> for s,i in seq:
...     d.setdefault(i, []).append(s)
...
>>> print d
{8: ['String2', 'String4'], 4: ['String1'], 15: ['String3']}

答案 1 :(得分:0)

通过使用字典,您可以更灵活。

a_dict = {  'string1' : 6,
            'string2' : 76,
            'string3' : 765,}


for key in a_dict:
    if(a_dict[key] == 76):
        print('The number ' + str(a_dict[key]) + ' has a key name of ' + key)

如果需要,您还可以将列表作为值。