【问题标题】:Creating dictionary using python from javascript var data [duplicate]从javascript var数据使用python创建字典[重复]
【发布时间】:2019-02-07 22:23:54
【问题描述】:

试图弄清楚如何做到这一点,但尚未找到好的解决方案。我从 XML 响应中提取了这些数据。它在一个 var 标签中。现在我想做的是用它创建一个字典。 domain.com 应与其后面列出的数字配对。

这是数据:

[
    'cb131.domain1.com', '147827', 
    'cb143.domain2.com', '147825', 
    'cb175.domain1.com', '147454', 
    'cb190.domain.com', '146210', 
    'cb201.domain.com', '146208', 
    'cb219.domain.com', '146042', 
    'cb225.domain.com', '146282', 
    'cb900.domain.com', '148461', 
    'cb901.domain.com', '148493', 
    'cb902.domain.com', '148495', 
    'cb903.domain.com', '148497', 
    'cb904.domain.com','148499', 
    'cb905.domain.com', '148501', 
    'cb906.domain.com', '148503', 
    'cb907.domain.com', '148505', 
    'cb908.domain.com', '148507', 
    'cb909.domain.com', '148509'
]

所以例如 cb131.domain1.com 应该与 147827 配对,cb143.domain2.com 应与 147825 配对等等。

在一个很好的快速解决方案上画一个空白关于如何做到这一点。希望有人可以提供帮助。

谢谢!

用我在下面选择的答案编辑:

我选择这个答案也是为了帮助其他人,我添加了一种打印结果的好方法(数据是我获得的字符串):

import ast
i = iter(ast.literal_eval(data))
dic = dict(zip(i, i))
for key , value in dic.items():
    print(key, " :: ", value)

【问题讨论】:

  • 实际上,我查看了这些答案,但没有一个像我在问题上给出的答案那样干净。它们也是类似的问题,并不准确。每个人都有不同的起点,想要一个与我不匹配的不同结果。所以我分别不同意你将其标记为重复。

标签: javascript python dictionary


【解决方案1】:

应该这样做。假设列表保存到变量l

keys = l[::2]
vals = l[1::2]
dic  = dict(zip(keys, vals))

【讨论】:

  • 当我尝试这个并打印 dic 我得到这个:{'[': "'", 'c': 'o', '1': '4', 'd': ' c', '-': 'o', 'm': '', 'l': 'o', 'u': 'd', 'e': 'x', 'r': 'g', "'": ']', '': "'", '7': '.', '2': '.', '3': '.', '5': '.', '0' : '9', '6': '.','9': '.', '4': '.', '8': '5'}
【解决方案2】:

您可以在使用ast.literal_eval从输入文本中解析它之后从列表中创建一个迭代器,zip带有自身的迭代器,并将生成的元组序列传递给dict构造函数:

import ast
i = iter(ast.literal_eval(data))
dict(zip(i, i))

【讨论】:

  • 我尝试了这个解决方案,当我尝试打印出来时,我得到了与上面的解决方案相同的输出:{'[': "'", 'c': 'o', '1 ':'4','d':'c','-':'o','m':'','l':'o','u':'d','e':' x', 'r': 'g', "'": ']', '': "'", '7': '.', '2': '.', '3': '.', '5': '.', '0': '9', '6': '.','9': '.', '4': '.', '8': '5'} 不确定我做错了什么
  • 您应该首先将文本解析为实际列表。我已经相应地更新了我的答案。
  • 完美,成功了。非常感谢您的快速回复!
  • 我还添加了一个很好的打印声明来帮助其他人,这就是我所做的
【解决方案3】:

假设您在名为data 的python 数组中有上述内容,您可以这样做:

new_data = []
for i in range(0, len(data), 2):
    new_data.append((data[i], data[i+1]))

现在 new_data 将是一个元组列表。如果您愿意,您当然可以创建一个更好的数据结构来保存这些对。

【讨论】:

  • 当我尝试这个解决方案并打印出字典时,我得到了这个结果。不确定什么不起作用。 [('[', "'"), ('c', 'b'), ('1', '3'), ('1', '.'), ('d', 'c') , ('-', '0'), ('1', '.'), ('c', 'o'), ('m', ''), ('d', 'c'), ('l', 'o'), ('u', 'd'), ('-', 'w'), ('e', 'b'), ('e', 'x'), ('-', 'o'), ('r', 'g'), ("'", ','), ('', "'"), ('1', '4'), ( '7', '8'), ('2', '7'), ("'", ','), (' ', "'"), ('c', 'b'), .. .......它更长,但没有足够的字符
【解决方案4】:

我还不知道可以写sn-p的Python,但是:

  • 在 Python 中初始化一个空字典
  • 分两步创建一个从 0 到数组长度的 for 循环计数索引。
    • 在里面添加一个字典条目,其键值在索引处,值在索引处 + 1
    • 也许检查重复项

这个答案对你有帮助吗?

这是 Python - 很快谷歌搜索:

dictionary = { }
for idx in range(0, len(data), 2)
   dictionary[data[idx]] = data[idx + 1]

【讨论】:

    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2020-07-15
    • 2022-10-14
    • 2019-05-22
    • 2014-07-25
    • 1970-01-01
    相关资源
    最近更新 更多