从python中的tuple获取具有值的项

2024-09-27 09:22:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 对象方法字符串object数组经验result元组
3条回答

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

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

您可以在Pythonofficial docs中阅读更多关于元组(和其他数据结构)的信息

所以你的函数可以是这样的:

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

通过遍历列表并检查每个元组的第二个项(这是您的键)的值,可以在结果列表中搜索特定元组:

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()与您在问题中请求的语法很接近。

您可以将输入元组转换为字典并从中访问键。类似的东西(仅在Python3中测试,因此您可能需要做一些更改才能使用Python2.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']

相关问题 更多 >

    热门问题