字符串在添加到集合时分解为单个字符

我有一个这种格式的json文件,


d = {

  "allowed_langs": [{

      "langs": ["java", "golang", "python"]

    },

    {

      "langs": ["java", "golang", "csharp"]

    },

  ]

}

我想要的输出是制作一个包含所有独特内容的语言列表langs,


所需的输出,


languages = ["java", "golang", "python", "csharp"]

首先我创建了一个空集,


allowed_languages = set()

我尝试使用嵌套循环来做到这一点,


for allowed_langss in d["allowed_langs"]:

    for each in allowed_langss["langs"]:

        allowed_languages.update(each)

但是当我打印它时,我得到了这个,


print(allowed_languages)

输出,


{'t', 'j', 'g', 'h', 'r', 'o', 'y', 'c', 'v', 'n', 'p', 'l', 'a', 's'}

有人能告诉我为什么它会分解成字符吗?


我也试过 list comprehension


print([lang for lang in d['allowed_langs']])

但这给了我,


[{'langs': ['java', 'golang', 'python']}, {'langs': ['java', 'golang', 'csharp']}]

而我想要的输出是,


所需的输出,


languages = ["java", "golang", "python", "csharp"]


互换的青春
浏览 257回答 3
3回答

HUWWW

您可以使用嵌套集合理解:d = {'allowed_langs': [{'langs': ['java', 'golang', 'python']}, {'langs': ['java', 'golang', 'csharp']}]}new_d = list({i for b in d['allowed_langs'] for i in b.get('langs', [])})输出:['java', 'python', 'golang', 'csharp']

慕村225694

使用set.add代替set.update。set.add是set.update为list.append是list.extend。set.add将单个元素添加到集合中,set.update将一个可迭代对象作为参数并添加该可迭代对象中的每个元素。字符串是可迭代的,其中元素是单个字符......

慕姐4208626

只需更改代码的更新部分(第 3 行)。for allowed_langss in d["allowed_langs"]:    for each in allowed_langss["langs"]:        allowed_languages.update({each})Python 的 set.update 将字符串拆分为其组成字符。您可以通过要求 python 向现有集合添加一个集合来克服这个问题。如果您希望将集合作为列表:[i for i in allowed_languages]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python