我正在读取来自外包的数据。数据有“名称”和“带警告的值”,所以我把它们放在字典中
d[data[i:i+6]] = data[i+8:i+17], data[i+25:i+36]
因此最后我的字典为;
{'GPT-P ': ('169 ', 'H '), 'GOT-P ': ('47 ', ' '), .....
如上所示,键和值都可能有不必要的空格。 我能够克服键中的空格;
d = {x.replace(' ',''): v
for x, v in d.items()}
但似乎无法管理类似的值。我尝试使用 d.values()
但它修剪了键名并且也只适用于其中 1 个值。
你能帮我理解如何删除几个值的空间(在这种特殊情况下为2个值)并最终得到类似的东西;
{'GPT-P': ('169', 'H'), 'GOT-P ': ('47', ''), .....
谢谢。保持安全和健康
答案 0 :(得分:2)
给定:
DoT={'GPT-P ': ('169 ', 'H '), 'GOT-P ': ('47 ', ' ')}
由于您将字符串元组作为值,您需要将 .strip()
应用于元组中的每个字符串:
>>> tuple(e.strip() for e in ('47 ', ' '))
('47', '')
将其应用于字典理解中的每个键、值,然后您就可以了:
>>> {k.strip():tuple(e.strip() for e in t) for k,t in DoT.items()}
{'GPT-P': ('169', 'H'), 'GOT-P': ('47', '')}
您尝试使用 .replace(' ','')
。这将替换所有空格:
>>> ' 1 2 3 '.replace(' ','')
'123'
使用 .strips()
之一更为典型:
>>> ' 1 2 3 '.strip()
'1 2 3'
>>> ' 1 2 3 '.lstrip()
'1 2 3 '
>>> ' 1 2 3 '.rstrip()
' 1 2 3'
您可以在我上面使用的推导式中使用 .replace
或任何 .strips()
。
答案 1 :(得分:2)
您还需要在 v
值中进行空格替换,但是
在您的情况下,您的字典中的值似乎是元组。
我猜您想删除每个元组的所有元素中的空格,因此您需要在此处进行第二次迭代。你可以这样做:
d = {'GPT-P ': ('169 ', 'H '), 'GOT-P ': ('47 ', ' ')}
{x.replace(' ', ''): tuple(w.replace(' ', '') for w in v) for x, v in d.items()}
哪个返回:
{'GPT-P': ('169', 'H'), 'GOT-P': ('47', '')}
请注意,字典推导式中存在列表(或元组)推导式 tuple(w.replace(' ', '') for w in v)
。