为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2021-07-23 21:15:09
我有一个这种格式的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 comprehensionprint([lang for lang in d['allowed_langs']])但这给了我,[{'langs': ['java', 'golang', 'python']}, {'langs': ['java', 'golang', 'csharp']}]而我想要的输出是,所需的输出,languages = ["java", "golang", "python", "csharp"]
查看完整描述

3 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您可以使用嵌套集合理解:


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']


查看完整回答
反对 回复 2021-07-28
?
慕村225694

TA贡献1880条经验 获得超4个赞

使用set.add代替set.updateset.addset.updatelist.appendlist.extend

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


查看完整回答
反对 回复 2021-07-28
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

只需更改代码的更新部分(第 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]


查看完整回答
反对 回复 2021-07-28
  • 3 回答
  • 0 关注
  • 256 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信