如何用元组作为衍生物来制作结构或层次结构?

How to make a structure or hierarchy with tuples as derivatives?

我想在 Python 中创建结构或相关层次结构,例如:名称 xxxx 附加到列表,在 xxxx 下多个 "ID's" 存储?在搜索 ID 时,它会 return 它存储在 xxxx 下。

为了更清楚地说明,对于 xxxxyyyy

xxxx -  |- 112       yyyy - |- 123
        |- 113              |- 124
        |- 114              |- 125

并且在搜索这些 ID 中的任何一个时,它会 return 它所属的组,即如果我搜索 114,它会 return 它属于yyyy.

class Post:
    ID            =  []
    incoming_data =  ''
    Buff          =  0
    IP            =  []
    contact_info  =  ''

    def Map(self, object):
       object.contact_info = object.IP + object.ID
       print object.contact_info

obj1 = Post()
obj1.incoming = '112113114115116'
obj1.IP.append('xxx.xxx.xxx.xxx')

for x in range(1,6): #seperates it into sets of 3 digit numbers.
    obj1.ID.append(obj1.incoming_data[(3 * x) - 3: 3 * x])

obj1.Map(obj1)       #Prints the concatenated value of the both the strings.

我已经到了将它作为字符串的地步,但我应该为此使用元组吗?我是新手,几个小时前我才开始关注,感谢您的帮助。我想知道可能的方法。

当前输出:

['xxx.xxx.xxx.xxx', '112', '113', '114', '115', '116']
IP = "xxx.xxx.xxx.xxx"
data = (112, 113, 114, 115, 116)

mydict = {}
mydict[IP] = data

print mydict

hunt = 114

if hunt in mydict[IP]:
    print("{} is in {}".format(hunt, IP))

字典教程如下:https://docs.python.org/3.6/tutorial/datastructures.html#dictionaries

您可以使用字典(类似于 c 中的散列 table)。请记住,字典提供 O(1) 访问指定键的值。因此,由于在您的情况下,值(113,114 等...)在它们之间都是不同的,您可以将它们用作键并通过它们在相应的名称中具有 O(1) 访问权限(例如 xxxx、yyyy 等...)

>>> d = {
...     112 : 'xxxx',
...     113 : 'xxxx',
...     114 : 'xxxx',
...     123 : 'yyyy',
...     124 : 'yyyy',
...     125 : 'yyyy',
... }
>>> print d[114]
xxxx

更新

要为一个键存储多个值,您可以使用 list.

第一种方式

>>> d = {
...     112 : ['xxxx'],
...     113 : ['xxxx'],
...     114 : ['xxxx'],
...     123 : ['yyyy'],
...     124 : ['yyyy'],
...     125 : ['yyyy'],
...     }
>>>
>>> d[114].append('zzzz')
>>> d.items()
[(112, ['xxxx']), (113, ['xxxx']), (114, ['xxxx', 'zzzz']), (123, ['yyyy']), (124, ['yyyy']), (125, ['yyyy'])]
>>> d[114]
['xxxx', 'zzzz']

第二种方式(使用collections.defaultdict

>>> from collections import defaultdict
>>>
>>> l = [(114, 'xxxx'), (113, 'yyyy'), (123, 'xxxx'), (114, 'yyyy'), (125, 'xxxx')]
>>> d = defaultdict(list)
>>> for k, v in l: d[k].append(v)
...
>>> d.items()
[(113, ['yyyy']), (114, ['xxxx', 'yyyy']), (123, ['xxxx']), (125, ['xxxx'])]
>>> d[114]
['xxxx', 'yyyy']