我试图将一个字典值与一个变量进行比较,但由于某些原因,我无法从字典中输出我想要的部分。字典是来自html表的输出。这是我用来将html表转换成字典的代码:
with open('output.csv') as fd:
rd = csv.DictReader(fd, skipinitialspace=True)
for row in rd:
lista = { k: row[k] for k in row if k in ['Name', 'Clan Days']}
这是输出:
{'Name': 'SirFulgeruL2k19', 'Clan Days': '140'}
{'Name': 'Darius', 'Clan Days': '127'}
例如,如何比较第一个字典中的氏族天数,以及如果值与我在变量中设置的值匹配,则应该以字符串形式获取名称,以便稍后在另一行中使用它。
发布于 2018-12-13 03:59:52
假设您首先将数据读取到字典列表中:
data = [{ k: row[k] for k in row if k in ['Name', 'Clan Days']}
for row in rd]
如果没有与搜索查询匹配的条目,则可以使用next()
在data
中搜索与Clan Days
值默认为None
的第一个字典:
desired_clan_days = '140'
clan_name = next((entry["Name"] for entry in data
if entry["Clan Days"] == desired_clan_days), None)
现在,next()
将返回第一个匹配项,如果您需要所有匹配项,只需使用列表理解:
clan_names = [entry["Name"] for entry in data
if entry["Clan Days"] == desired_clan_days]
请注意,在最坏的情况下(未找到条目),这种搜索需要遍历data
中的所有条目。如果这种类型的搜索是这种数据结构的主要用例,请考虑重新设计它以更好地适应问题-例如,将clan_days值作为带有族名列表的键:
data = {
"140": ["SirFulgeruL2k19"],
"127": ["Darius"]
}
在这种情况下,获取匹配将是一个常量操作,就像data[desired_clan_days]
一样简单。defaultdict(list)
可以帮助你实现这一转变。
发布于 2018-12-13 04:01:26
我不太确定您到底想要什么,但如果它只是将一个字典值与一个变量进行比较,并在它们匹配时获取名称部分,那么您将得到如下所示的结果。
>>> dict = {'Name': 'SirFulgeruL2k19', 'Clan Days': '140'}
>>> target = 140
>>> if int(dict['Clan Days']) == target:
... name = dict['Name']
...
>>> name
'SirFulgeruL2k19'
编辑:读你的帖子太快了,考虑到它是HTML表格中的所有行,这段代码太简单了。使用alecxe的答案:)
https://stackoverflow.com/questions/53750461
复制相似问题