【问题标题】:how to access list within a list of strings in Python如何在Python中访问字符串列表中的列表
【发布时间】:2016-12-14 11:38:44
【问题描述】:

我有一个具有不同语言的 Json 格式的列表,我想在将特定语言进一步保存到不同的列表之前用它们的标签来识别它们。

假设我有一个 .net 和 web 的标签,以及它们以 json 格式使用的基本语言和工具,即

>>> json_words = """
...     [
...      {".Net": [
...       ["ASP .NET", 3],
...       ["Angular JS", 1]
...      ]},
...      {"Web": [
...       ["Database", 3],
...       ["jQuery", 3]
...      ] }
...     ]
... """

还要注意方括号的闭合。在这个例子中,列表中的第一个字符串(在我的例子中是 .net 和 web)被认为是标签,其余的是它的语言。

现在,我做了这样的事情来检查返回的内容:

>>> import json

>>> important_words = json.loads(json_words)
>>> important_words = [str(s) for s in important_words]
>>> important_words = [item.lower() for item in important_words]

>>> print important_words[0]
[u'[.net]', [u'asp .net', 3], [u'angular js', 1]]

但我不能单独访问标签..

>>> print important_words[0][1]
u

如何仅访问标签,然后访问其进一步列表。我也试图让它成为一个 numpy 数组,但它根本没有帮助。

values = np.array(important_words)

实际上最困扰我的是列表的方括号...我是否正确制作了这个 json 列表?

任何形式的帮助将不胜感激......

【问题讨论】:

  • 您确定这是您正在运行的代码吗?正如它所写的那样,当您尝试创建important_words 时它将失败。您在列表中调用lower()(没有lower mwthod)。
  • 哦不,这不是真正的代码……我只是举了个例子,这就是我的想法……真正的代码非常庞大,所以我不能全部发布。跨度>
  • @Falcon 你需要创建一个小例子。了解如何创建minimal reproducible example
  • @PeterWood 这是一个小例子……这个例子有什么问题?
  • @Falcon 查看我之前的链接。

标签: python json list numpy


【解决方案1】:

如果我了解您要做什么,我会将其转换为字典(如果您想保持顺序,请使用 orderedDict)。您还可以从列表中过滤掉数字,留下语言列表。

>>> frameworks = {framework[0]: [language[0] for language in framework[1:]] for framework in _list}
>>> frameworks.keys()
['[.Net]', '[Web]']
>>> frameworks['[.Net]']
['ASP .NET', 'MVC Framework', 'Angular JS', 'AJAX']
>>> frameworks['[Web]']
['Database', 'jQuery', 'Javascript', 'SQL Server', 'Bootstrap', 'Html', 'CSS']

【讨论】:

  • 感谢您的帮助,但这不起作用,因为这只是一个示例示例,真正的 _list 中有更多标签,并且在您的第二个输出中,即框架 ['[.Net]'] 你是实际上破解了不正确的代码加上我只想访问列表中存在的语言而不是数字,最后你运行了这个代码吗?它不适合我。
  • 我确实运行了代码。你用的是什么python版本?它给出了什么错误?
  • 我直接用了`[.Net]'作为例子。如果您不想要这些数字,您也可以删除它们。我将编辑我的答案。
  • 您确定您的代码工作正常吗?因为当我运行你的 sn-p 时它不能正常工作。而是给我这样的输出: {'[': ['u', "'", 'w', 'e', 'b', "'", ',', '', '[', 'u', "'", '.', 'n', 'e', 't', '', 'f', 'r', 'a', 'm', 'e', 'w' , 'o', 'r', 'k', "'", ',', '', '3', ']', ',', '', '[', 'u', "'" , '.', 'n', 'e', 't', '', '2', '.', '0', "'", ',', '', '3', '], ']']}
  • 您确定您的_list 与您的问题中所写的完全一样吗?
【解决方案2】:

您正在将整个 list 转换为字符串:

>>> [str(s) for s in important_words]

important_words 是列表的list,例如第一个s 将是:

>>> important_words[0]
[u'[.Net]', [u'ASP .NET', 3], [u'Angular JS', 1]]

当您调用str(s) 时,您会得到整个列表的字符串表示形式:

>>> str(important_words[0])
u"[u'[.Net]', [u'ASP .NET', 3], [u'Angular JS', 1]]"

【讨论】:

    【解决方案3】:

    如果您根据 ':' 拆分列表,那么您可以访问您的 json_words。

      >>> json_words = [str(s) for s in json_words]
      >>> json_words = [item.lower() for item in json_words]
      >>> tag_list = {}
      >>> for i in range(0, len(json_words)):
      ...     tag_list[i] = (json_words)[i].split(':')[0] #This will gives you list of first strings
      >>> print tag_list
      {0: "{'.net'", 1: "{'web'"}
      >>> print tag_list.values()
       ["{'.net'", "{'web'"]
    

    为了访问进一步的列表,用逗号分割它,如下所示:

       >>> dotnet_list = (json_words)[i].split(':')[1].split(',') 
         ["'asp .net'", "'angular js'"]
    

    这是一种更长但更简单的方法(我认为)

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 2010-11-26
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多