Python 存储http请求的数据结构
Python data structure to store http request
我正在寻找处理和存储 http 请求的想法/技巧 headers。
我需要保留 headers 的顺序并准备好重复
(甚至是键和值的重复项)。
无论是字典还是有序字典都不能满足这里的目的。
这些需求通常使用什么data-structures?
使用 (header, value)
个元组(或 collections.namedtuple
)的列表:
headers = [('Host', 'abc.com'), ('User-Agent', 'Mozilla'), ('Host', '123.com'), ('TE', 'chunked'), ('User-Agent', 'Safari')]
这将保留每个 header 的条目顺序,并且还将保留重复项。
查找不会像字典那样高效,但(大概)每个请求的 header 数量不会很大。您可以使用列表理解或生成器表达式(如果更合适)进行查找。例子
查找 User-Agent
:
user_agents = [header for header in headers if header[0].lower() == 'user-agent']
>>> user_agents
[('User-Agent', 'Mozilla'), ('User-Agent', 'Safari')]
将其包装在提供 add_header(header, value)
和 get_header(header)
方法的 class 中相当容易。您可以通过实现 __getitem__()
来提供类似字典的名称查找。我会把它留作练习。
字典可以解决这个问题:
假设您有一个元组列表(header,value)
例如:
headers = [('User-Agent', 'Mozilla'),('User-Agent', 'Chrome'), ('Content-Type', 'application/json')]
values= {}
for k, v in headers:
setdefault(k, []).append(v)
这将保留入场顺序并重复
print(values)
{'User-Agent': ['Mozilla', 'Chrome'], 'Content-Type': ['application/json']}
我正在寻找处理和存储 http 请求的想法/技巧 headers。 我需要保留 headers 的顺序并准备好重复 (甚至是键和值的重复项)。
无论是字典还是有序字典都不能满足这里的目的。
这些需求通常使用什么data-structures?
使用 (header, value)
个元组(或 collections.namedtuple
)的列表:
headers = [('Host', 'abc.com'), ('User-Agent', 'Mozilla'), ('Host', '123.com'), ('TE', 'chunked'), ('User-Agent', 'Safari')]
这将保留每个 header 的条目顺序,并且还将保留重复项。
查找不会像字典那样高效,但(大概)每个请求的 header 数量不会很大。您可以使用列表理解或生成器表达式(如果更合适)进行查找。例子
查找 User-Agent
:
user_agents = [header for header in headers if header[0].lower() == 'user-agent']
>>> user_agents
[('User-Agent', 'Mozilla'), ('User-Agent', 'Safari')]
将其包装在提供 add_header(header, value)
和 get_header(header)
方法的 class 中相当容易。您可以通过实现 __getitem__()
来提供类似字典的名称查找。我会把它留作练习。
字典可以解决这个问题: 假设您有一个元组列表(header,value) 例如:
headers = [('User-Agent', 'Mozilla'),('User-Agent', 'Chrome'), ('Content-Type', 'application/json')]
values= {}
for k, v in headers:
setdefault(k, []).append(v)
这将保留入场顺序并重复
print(values)
{'User-Agent': ['Mozilla', 'Chrome'], 'Content-Type': ['application/json']}