我有一个从查询中获取的元组,但我没有Python经验,所以我不知道正确/最好的方法。这是元组的样子:
现在我需要像result.getItemWithKey('111.111.5.1')
那样返回单个数组对象或逗号分隔的字符串(因为它更有用),例如' object1,111.111.5.1'
答案 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)
答案 4 :(得分:0)
您还可以在dict理解中反转元组的元素:
test = ((1, 'R'), (2, 'K'))
values = {y: x for x, y in test}
values['R']
1