python - 将字典与变量进行比较

标签 python python-3.x dictionary

我正在尝试将字典值与变量进行比较,但由于某些原因我无法从字典中输出我想要的部分。 字典是 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'}

如何比较第一个字典中的氏族天数,如果该值与我在变量中设置的值匹配,则应将名称作为字符串获取,以便稍后在另一行中使用它。

最佳答案

假设您首先将数据读入字典列表:

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) 可以帮助您进行这种转换。

关于python - 将字典与变量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750461/

相关文章:

Python 3 - 多个字典键的交集

arrays - 计算3个数组中键的总值

c++ - 用 Cython 包装观察者模式

python - Visual Studio Code 不会使用池映射将调试器附加到 python 中的多进程

python - 如何在python中获取5分钟前的时间

python - 将字典变成两个列表,一个用于键,另一个用于值?

python - 检查数字列表是否在特定范围内?

python - Pandas 合并文件时设置数据类型

python - Keras 中的图像序列处理 ConvLSTM 与 LSTM 架构

python 从函数名看完整定义