使用键,删除所有具有相似值的键

时间:2018-07-19 17:39:39

标签: python python-3.x list-comprehension

我的目标是将一个随机的水果名称存储为fruit_name。使用此方法,我想删除所有值相同的前三个字母的水果。例如:

fruit_name = 'apple II'
dictionary = {'grape' : 'abc.asrtyui', 'apple' : 'xyz7.qwertyui',  'apple I' : 'xyz.rghhyui',  'grape II' : 'zxs2.qwertyui',  'apple II' : 'xyz.qwvnyyui', 'orange' : 'bnm1.qrthnrui'}

我的思考过程是:第1步:查找带有fruit_name的键(在本例中为“ apple II”)第2步:查看其值的前三个字母第3步:删除所有具有相同三个字母的键及其值。 因此,对于上面的示例,此过程发生后,字典将包含:

dictionary = {'grape' : 'abc.asrtyui', 'grape II' : 'zxs2.qwertyui', 'orange' : 'bnm1.qrthnrui'}

这是我的摘录,不确定我是否朝着正确的方向前进,因为我完全感到困惑。 ALSO ,id喜欢使用标准库执行此操作。预先感谢!

for k1, v1 in dictionary.items():
    for k2, v2 in dictionary.items():
        if k1 == k2:
            continue
        if v1[:3] == v2[:3]:

3 个答案:

答案 0 :(得分:1)

您只需要在字典上循环一次。使用字典理解,我们可以表示“所有值/值都不以键Build.Gradle的前三个字母开头的键/值”

"apple II"

答案 1 :(得分:0)

fruit_name = 'apple II'
dictionary = {'grape' : 'abc.asrtyui', 'apple' : 'xyz7.qwertyui',  'apple I' : 'xyz.rghhyui',  'grape II' : 'zxs2.qwertyui',  'apple II' : 'xyz.qwvnyyui', 'orange' : 'bnm1.qrthnrui'}
val = fruit_name[:3]
delete_vals = []
for i in dictionary.keys():
    if i[:3] == val:
        delete_vals.append(i)
for i in delete_vals:
    del dictionary[i]

那么,这是怎么回事?首先,我们使用字符串切片将变量val定义为fruit_name的前三个字母。然后,我们浏览字典中的键,找到所有这些都是键匹配val的前三个字符,并将它们附加到“删除列表”(无法在循环中将其删除,因为那样您将修改您要迭代的内容)。然后在单独的for循环中,浏览删除列表并删除字典中的相应值。

不一定是最短的方法,但最简单。

答案 2 :(得分:-1)

while True:
    if fruit_name == dictionary[fruit_name]:
        del dictionary[fruit_name]

这怎么了?