2015-07-12 3 views
3

У меня есть кортеж, который я выбрал из запроса, но у меня нет опыта с Python, поэтому я не знаю, как правильно/наилучшим образом это сделать. Вот что кортеж выглядит следующим образом: enter image description hereПолучить элемент со значением из кортежа в python

Теперь мне нужно что-то вроде result.getItemWithKey('111.111.5.1'), который возвращает один объект массива или разделенный запятыми строку (как это более полезно), как «Object1, 111.111.5.1»

+1

вы не можете использовать словарь вместо кортежа? Вам будет легче. –

+0

Что вы подразумеваете под «объектом массива». В python реализовано более одной реализации массива. Но похоже, что вы хотите получить какой-либо другой тип даты, например 'list' или' string'. –

ответ

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 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() близка к синтаксис, который вы запросили в своем вопросе.

+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

Если вы просто пытаетесь проиндексировать в кортеж, следуйте упоминанию ответа. Если вы желаете, чтобы произвести поиск по ключевому

result.getItemWithKey('111.111.5.1') 

, то вы можете использовать dictionaries вместо кортежей.

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'] 
Смежные вопросы