如何解析具有不同键值数量的元组列表
Posted
技术标签:
【中文标题】如何解析具有不同键值数量的元组列表【英文标题】:How to Parse a list of tuples with different number of key values 【发布时间】:2022-01-12 17:57:17 【问题描述】:我有一个这样的tuples
列表。
('change', ['System.Rev', 'newValue'], (1, 2))
('add', ['System.Rev'], [('oldValue', 1)])
('change', ['System.AuthorizedDate', 'newValue'], ('2021-10-27T11:10:45.047Z', '2021-10-27T11:10:45.77Z'))
('add', ['System.AuthorizedDate'], [('oldValue', '2021-10-27T11:10:45.047Z')])
('change', ['System.RevisedDate', 'newValue'], ('2021-10-27T11:10:45.77Z', '9999-01-01T00:00:00Z'))
('add', ['System.RevisedDate'], [('oldValue', '2021-10-27T11:10:45.77Z')])
('change', ['System.ChangedDate', 'newValue'], ('2021-10-27T11:10:45.047Z', '2021-10-27T11:10:45.77Z'))
('add', ['System.ChangedDate'], [('oldValue', '2021-10-27T11:10:45.047Z')])
('change', ['System.Watermark', 'newValue'], (249, 250))
('add', ['System.Watermark'], [('oldValue', 249)])
('add', '', [('Microsoft.VSTS.Common.BacklogPriority', 'newValue': 599975506.0)])
有没有办法将它转换成字典或其他方式来解析它,以便我可以获得 add
和 change
值?
预期输出
change
System.Rev
newValue
2
add
Microsoft.VSTS.Common.BacklogPriority
newValue': 599975506.0
或类似的东西,可以以干净的格式显示添加和更改的值以发送到
db
列。
这就是我得到这个的方式
from dictdiffer import diff
for i, j in enumerate(rev_items):
try:
res = list(diff(rev_items[i], rev_items[i+1]))
for item in res:
print(item)
当我执行dict(res)
时,它什么也不打印。
我尝试过的一种方法是这样。 不使用列表理解
for item in res:
for c in range(len(item)):
print(item[c])
输出这个
change
['System.Rev', 'newValue']
(1, 2)
add
['System.Rev']
[('oldValue', 1)]
change
['System.AuthorizedDate', 'newValue']
('2021-10-27T11:10:45.047Z', '2021-10-27T11:10:45.77Z')
add
['System.AuthorizedDate']
[('oldValue', '2021-10-27T11:10:45.047Z')]
change
['System.RevisedDate', 'newValue']
('2021-10-27T11:10:45.77Z', '9999-01-01T00:00:00Z')
add
['System.RevisedDate']
[('oldValue', '2021-10-27T11:10:45.77Z')]
change
['System.ChangedDate', 'newValue']
('2021-10-27T11:10:45.047Z', '2021-10-27T11:10:45.77Z')
add
['System.ChangedDate']
[('oldValue', '2021-10-27T11:10:45.047Z')]
change
['System.Watermark', 'newValue']
(249, 250)
add
['System.Watermark']
[('oldValue', 249)]
add
[('Microsoft.VSTS.Common.BacklogPriority', 'newValue': 599975506.0)]
如何从中获取/解析 add
和 change
值?
【问题讨论】:
我没有投票,但这不是元组列表。[...]
中包含一个列表
目前尚不清楚您的预期输出与输入之间的关系。为什么新值只有2
,而不是(1, 2)
?
什么是revs
?为什么不只是for value in response['value']:
?
rev_items[i+1]
将在最后一次迭代中出错。
什么是diff()
? pandas 和 numpy 中有一个diff()
方法,但它不是标准的 Python 函数。
【参考方案1】:
感谢Barmar 的输入。我就是这样得到的。
res = list(diff(rev_items[i], rev_items[i+1]))
for item in res:
for a, b in enumerate(item):
if item[a] == 'change' or item[a] == 'add':
print(item[a+1], ":", item[a+2])
输出
['System.Rev', 'newValue'] : (1, 2)
['System.Rev'] : [('oldValue', 1)]
['System.AuthorizedDate', 'newValue'] : ('2021-10-27T11:10:45.047Z', '2021-10-27T11:10:45.77Z')
['System.AuthorizedDate'] : [('oldValue', '2021-10-27T11:10:45.047Z')]
['System.RevisedDate', 'newValue'] : ('2021-10-27T11:10:45.77Z', '9999-01-01T00:00:00Z')
['System.RevisedDate'] : [('oldValue', '2021-10-27T11:10:45.77Z')]
['System.ChangedDate', 'newValue'] : ('2021-10-27T11:10:45.047Z', '2021-10-27T11:10:45.77Z')
['System.ChangedDate'] : [('oldValue', '2021-10-27T11:10:45.047Z')]
['System.Watermark', 'newValue'] : (249, 250)
['System.Watermark'] : [('oldValue', 249)]
: [('Microsoft.VSTS.Common.BacklogPriority', 'newValue': 599975506.0)]
【讨论】:
以上是关于如何解析具有不同键值数量的元组列表的主要内容,如果未能解决你的问题,请参考以下文章