如何用元组作为衍生物来制作结构或层次结构?
How to make a structure or hierarchy with tuples as derivatives?
我想在 Python 中创建结构或相关层次结构,例如:名称 xxxx
附加到列表,在 xxxx
下多个 "ID's" 存储?在搜索 ID 时,它会 return 它存储在 xxxx
下。
为了更清楚地说明,对于 xxxx
和 yyyy
:
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']
我想在 Python 中创建结构或相关层次结构,例如:名称 xxxx
附加到列表,在 xxxx
下多个 "ID's" 存储?在搜索 ID 时,它会 return 它存储在 xxxx
下。
为了更清楚地说明,对于 xxxx
和 yyyy
:
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']