【问题标题】:How to add a set to a list? (python3x)如何将集合添加到列表中? (python3x)
【发布时间】:2016-03-15 12:11:01
【问题描述】:

我目前正在使用 nltk 模块研究语义。读取的数据对列表中的每个条目使用以下格式:

('dog', {'1','2'})

所以我尝试为用户创建一个前端来输入他的数据集。我现在面临的问题是如何将集合插入到条目中。 我尝试使用外壳:

v = []
v.append(('dog',set(['1','2'])))
v

给了我我想要的,但不知何故我的代码没有复制它,而是给了我:

('dog', '{'1','2'}')

在集合上有额外的括号。

这是我的代码:

...
def addpredicate(v):
print('Which predicate would you like to add? \nThe format is p,{\'q\'}...')
v.append(tuple(input().split(',')))
print(v)
choose = input(print('If you would like to add another entry...'))
...

基本上,我看到我的 v.append() 事情很可能是错误的,但我不知道如何在不强制这样的情况下将集合添加到列表中。我想去掉出现的引号也是一种选择,但我也不知道该怎么做。

【问题讨论】:

  • 您能否重新edit 为您的代码添加正确的缩进?

标签: python list set nltk quotes


【解决方案1】:

使用ast.literal_evalinput()的返回值(一个字符串)转换为实际的数据结构:

import ast

v.append(ast.literal_eval(input()))

【讨论】:

  • 非常感谢!奇迹般有效。 :)
【解决方案2】:

您应该向用户询问各个令牌,然后“手动”将它们添加到集合中,而不是依赖用户输入正确的 Python 代码(即使他们可能)。

试试这个:

print('The format is \'p\',{\'q\'}...')
predicate,sets = input().split(',',1)
v.append((predicate, set(sets[1:-1].split(','))))

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多