【问题标题】:Python Nested dictionary compare values internallyPython嵌套字典在内部比较值
【发布时间】:2019-06-14 23:30:18
【问题描述】:

我正在尝试处理带有键的字典,每个键都有一个值列表,并从中创建一个嵌套字典。并且还比较列表中每个键的相等值,并生成一个包含相等和不相等值列表的新字典。

我能够遍历每个键的值列表并处理它们以获得一个新变量,我想用它来创建新的嵌套字典。但是目前在第一个键值处会引发空异常。

dict1 = {a:[d,e,f], b:[p,q,r]}
dict2 = {d:100, e:100, f:100, p:100, q:100, r:100}
dict3 = {d:text1, e: text2, f: text3}

for i in dict1.keys():
    for x in dict1[i]:
        if dict2[x] == 100:
            string = re.findall(r'sometext in text',dict3[x])[0]
            ver = re.search('(?is)<i>(.+?)</i>', match_string).group(1)
            d[i][x] = ver

预期结果:

d = { a:{d:ver1, e:ver2, f:ver3}, b:{p:ver4, q:ver5, r:ver6 }

在遍历每个嵌套值之后,每个值都需要与它的对等值进行比较,并在一个新的字典中排列,并且值的键匹配。如下:

if d's ver1 = e's ver2 =! f's ver3
    dict4 = {a: { equal:[d,e], unequal: [f]}

【问题讨论】:

  • 那不是一个有效的dictd 是无效的,'d' 是。请做一个可运行的例子。我们不喜欢仅仅因为您想节省一些时间而修复小错别字。
  • 我只是在所有行话中错过了它,对不起。 d={} 是一个空字典。

标签: python python-3.x dictionary


【解决方案1】:

我不知道dict3 与您想要的输出在哪里发挥作用,但这会得到想要的输出:

dict1 = {'a':['d','e','f'], 'b':['p','q','r']}
dict2 = {'d':100, 'e':100, 'f':100, 'p':100, 'q':100, 'r':100}

result = {key1: {key2: dict2[key2] for key2 in val1} for key1, val1 in dict1.items()}
print(result)

输出:

{
  "a": {
    "d": 100,
    "e": 100,
    "f": 100
  },
  "b": {
    "p": 100,
    "q": 100,
    "r": 100
  }
}

【讨论】:

  • 您好,很欣赏这一点,但我不想形成嵌套字典,而是想按照我的问题中所述比较它们并相应地重新分组。如果您清楚地看到 dict3 已明确声明并且具有相同的键 dict2 但具有不同的属性。想在下面做。 d = { a:{d:ver1, e:ver2, f:ver3}, b:{p:ver4, q:ver5, r:ver6 } 在内部排序为 if d's ver1 = e's ver2 =! f的ver3 dict4 = {a:{等于:[d,e],不等于:[f]}
  • @TR007 将您的问题分解为“已知输入”和“所需输出”以及如何到达那里。您的问题不是很清楚,很难看出什么是输入以及您得出什么(因为您定义了所有这些)。我不知道您的问题中 ver 的内容来自哪里。
  • for i in dict1.keys(): for x in dict1[i]: if dict2[x] == 100: string = re.findall(r'sometext in text',dict3[x])[0] ver = re.search('(?is)&lt;i&gt;(.+?)&lt;/i&gt;', match_string).group(1) d[i][x] = ver
  • 我认为您没有详细查看包含“ver”的代码 sn-p。无论如何,我想把它分解成这个,忽略剩下的问题,我有一本字典 d = { a:{d:val1, e:val2, f:null}, b:{p:val3, q: val4, r:val5 }}。所以我想取每个键的值并比较它们之间的嵌套值,如果 val1 = val2, and val3=val4 所需的输出是 new_dict={a:{equal: [d,e], null:f}, b :{等于:[p,q],不等于:r}}。所以这些值只能与同一嵌套键下的其余值进行比较,并重新组织成一个 new_dict
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多