【问题标题】:Javascript iterate over python dictJavascript迭代python dict
【发布时间】:2016-02-19 10:41:24
【问题描述】:

我正在创建一个 python 字典并将其传递给 javascript。

var students = {{myStudents}}

当生成时变为

var students = [(u'Mark', u'b7'), (u'Phillipe', u'a67'), (u'John', u'a1')]

现在我需要遍历名称(Mark、Philippe 等)并填充下拉列表。

我的问题,如何分别访问键/值。最终我可以分别通过两个列表,但我想检查它们是否是另一种非暴力方式。

【问题讨论】:

  • 你为什么不对你的字典进行 JSON 编码?
  • 你所拥有的也看起来像一个元组列表,而不是一个字典。
  • @jsfan 你能举个例子吗?不知道为什么会这样!
  • 字典将呈现为{u'Mark': u'b7', u'Phillipe': u'a67', u'John': u'a1'}。但是,由于 unicode 标记,您所拥有的和那些都不是有效的 Javascript。你想坚持使用元组列表还是将其变成字典?
  • 有一些关于在 JavaScript here 中迭代字典的有用信息。特别是,您需要使用.hasOwnProperty() 方法。

标签: javascript python django


【解决方案1】:

在将变量传递给 Javascript 之前,您希望

import json
json_var = json.dumps(var)

然后将 json_var 而不是 var 传递给 Javascript。

在 Javascript 中,您然后将其迭代为

for (k in students) {
}

使用k 获取名称,使用students[k] 获取与名称关联的值。

如果您想坚持使用元组列表,请在循环中使用值 students[k][0] 作为名称,使用 students[k][1] 作为元组中的第二个值。

【讨论】:

  • json.dumps 出现 pipe.broken 错误并增加了加载时间
  • @Syntax_Error:您的字典或列表有多大?你能用一些相关的 Python 代码编辑你的问题吗?在没有任何性能问题之前,我已经对相当大的对象进行了 JSON 编码。
  • 大约 6000 个元素。名称可以达到 60 个字符,代码为 15 个字符......我在问题中简化了它们。塞尔丘克的回答是我认为最好的解决方案
  • @Syntax_Error: 只要字符串中没有双引号,Selcuk 的答案就可以。那些会破坏你的Javascript。传递前的 JSON 编码是更安全更好的风格。 6000 个元素绝对没有问题,你得到一个坏掉的管道告诉我你在某个地方做错了什么。但是,如果没有看到代码和上下文,我不会知道它是什么。
【解决方案2】:

如果您在myStudents 中确实有一个字典,您可以将您的模板编写为:

var students = {{% for key, value in myStudents %}{"{{ key }}": "{{ value }}"},{% endfor %}}

会变成

var students = {"Mark": "b7", "Philippe": "a67", ...}

在您的 HTML 源代码中。然后,您可以使用以下代码在 Javascript 中对其进行迭代:

for(var key in students) {
  var value = students[key];
  ...
}

【讨论】:

  • {"{{ key }}": "{{ value }}" },
【解决方案3】:

就像@jsfan 指出的那样,python 字典将呈现如下: {u'students': {u'Mark': u'b7', u'Phillipe': u'a67', u'John': u'a1'}}。要遍历您使用的字典,

  for (x in students) {
    students[x]
 }

但是,如果您希望获取特定键的值,例如键 'Mark' 的值,您可以使用:

for (x in students)
 {
    students[x]['Mark']
}

【讨论】:

    【解决方案4】:

    我在这里尝试了答案,但对我不起作用。我发现我所要做的就是解析 JSON 数据。我认为分享这个解决方案可能对其他人有帮助: 在python文件中:

    import json
    json_data = json.dumps(your_dict)
    

    将 json_data 传递给您的 Javascript 文件。 在您的 Javascript 文件中:

    var keys = JSON.parse(json_data);
    for (var key in keys) {
    
    }
    

    【讨论】: