从python中的元组获取值为item的项

时间:2015-07-12 12:09:51

标签: python python-2.7

我有一个从查询中获取的元组,但我没有Python经验,所以我不知道正确/最好的方法。这是元组的样子:enter image description here

现在我需要像result.getItemWithKey('111.111.5.1')那样返回单个数组对象或逗号分隔的字符串(因为它更有用),例如' object1,111.111.5.1'

5 个答案:

答案 0 :(得分:4)

您的结果是一个元组元组,因此您可以使用以下索引访问它:

>>> result[0]
('object1', '111.111.5.1')
>>> result[0][0]
'object1'
>>> result[0][1]
'111.111.5.1'

您可以在Python official docs

中阅读有关元组(和其他数据结构)的更多信息

所以你的功能看起来像这样:

def get_item(result, key):
    for obj, num in result:
        if num == key:
            return obj, num

答案 1 :(得分:3)

您可以通过迭代列表并检查每个元组的第二项(这是您的密钥)的值来搜索结果列表中的特定元组:

results = [('object%d' % i, '111.111.5.%d' % i) for i in range(1,8)]

key = '111.111.5.4'
result = None
for t in results:
    if t[1] == key:
        result = t

print result

输出:

('object4', '111.111.5.4')

这演示了如何使用从零开始的索引访问元组中的项(在这种情况下,1表示第二个元素)。如果在for循环中解压缩元组,您的代码将更具可读性:

for obj, value in results:
    if value == key:
        result = (obj, value)

如果将结果转换为字典,您的结果可能会更有用:

>>> results_dict = {v:k for k,v in results}
>>> print results_dict['111.111.5.6']
object6
>>> print results_dict['111.111.5.1']
object1
>>> print results_dict['blah']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'blah'
>>> print results_dict.get('111.111.5.5')
object5
>>> print results_dict.get('123456')
None

使用dict.get()接近您在问题中请求的语法。

答案 2 :(得分:2)

您可以将输入元组转换为字典并从中访问密钥。像这样的东西(只在python 3中测试过,所以你可能会用python 2.7进行一些更改)

from collections import defaultdict
mytuples = (('object1', '111.111.5.1'), 
            ('object2', '111.111.5.1'), 
            ('object3', '111.111.5.3'), 
            ('object4', '111.111.5.4'),)
mydict = defaultdict(list)
for name, key in mytuples:
    mydict[key].append(name)

for key, values in mydict.items():
    print(key, values)

输出:

111.111.5.1 ['object1', 'object2']
111.111.5.3 ['object3']
111.111.5.4 ['object4']

答案 3 :(得分:1)

如果你只想尝试索引元组,请按照提及回答。如果您想要按键搜索

result.getItemWithKey('111.111.5.1')

然后您可能希望使用dictionaries代替元组。

答案 4 :(得分:0)

您还可以在dict理解中反转元组的元素:

test = ((1, 'R'), (2, 'K'))
values = {y: x for x, y in test}
values['R']
1