【问题标题】:Converting a string to a dictionary将字符串转换为字典
【发布时间】:2021-07-25 06:34:14
【问题描述】:

我正在尝试将字符串转换为 Python 中的字典。我尝试了以下但收到错误 'dict' 对象不可调用。请帮我解决这个问题。

l=[]
str='Vijay=23,Ganesh=20,Lakshmi=19,Nikhil=22'
for x in str.split(','):
     y=x.split('=')
     l.append(y)
d=dict(l)
for k in d:
   print('{:1s}---{:1s}'.format(k,d[k]))

【问题讨论】:

  • 您收到错误是因为您可能用某些东西覆盖了dict(就像您对str 所做的那样)。这是一种不好的做法
  • 如果您在新的控制台/内核中执行它,您的代码实际上可以工作,但正如@JL0PD 所说,不要“重命名”基本的python 方法/类型,例如dictstr

标签: python dictionary iteration


【解决方案1】:
s = 'Vijay=23,Ganesh=20,Lakshmi=19,Nikhil=22'

dct = {n: a for n, a in (p.split("=") for p in s.split(","))} #Credits to JL0PD
print(dct)
#{'Vijay': '23', 'Ganesh': '20', 'Lakshmi': '19', 'Nikhil': '22'}

【讨论】:

  • 每对单独拆分的解决方案{n: a for n, a in (p.split("=") for p in s.split(","))}
  • @Andreas 你能解释一下我无法理解吗
  • @ChayanMehrotra 它被称为字典理解,你可以找到它的教程。如果您首先查看它们可能会更好。本质上,您将所有循环放在一行中。但请注意,您最初发布的代码也可以使用。请注意不要重命名 str 或 dict 等标准名称
【解决方案2】:
l=[]
str='Vijay=23,Ganesh=20,Lakshmi=19,Nikhil=22'
for x in str.split(','):
     y=x.split('=')
     l.append(y)
result = {}
for item in l:
    result[item[0]] = item[1]
print(result)

【讨论】:

    【解决方案3】:

    您覆盖保留字str。 在 python 中,str 是类字符串的名称。

    当你写str = 'Vijay=23,Ganesh=20,Lakshmi=19,Nikhil=22'时, 您将类 str 更改为 'Vijay=23,Ganesh=20,Lakshmi=19,Nikhil=22'

    运行此代码:

    l = []
    string = 'Vijay=23,Ganesh=20,Lakshmi=19,Nikhil=22'
    for x in string.split(','):
        y = x.split('=')
        l.append(y)
    d = dict(l)
    for k in d:
       print('{:1s}---{:1s}'.format(k,d[k]))
    

    相同的代码但遵循PEP8 rules

    pars_list = []
    row_data = 'Vijay=23,Ganesh=20,Lakshmi=19,Nikhil=22'
    for i in row_data.split(','):
        pars_list.append(i.split('='))
    
    data = dict(l)
    for k in data.keys():
        print('{:1s}---{:1s}'.format(k, data[k]))
    

    【讨论】:

      【解决方案4】:

      试试这个。

      第一步 遍历['Vijay=23', 'Ganesh=20', 'Lakshmi=19', 'Nikhil=22']

      第二步= 拆分每个人。 ['Nikhil', '22']

      第三步 将第一个元素作为键添加到字典中,将年龄作为值添加到字典中


      peopleDict = {people.split('=')[0]:int(people.split('=')[1]) for people in string.split(',')}
      

      输出

      {'Vijay': 23, 'Ganesh': 20, 'Lakshmi': 19, 'Nikhil': 22}
      

      #Note1:请确保不要将变量命名为strintinput 等。这些都是python 创建的方法,不要覆盖它们。

      #Note2:我的输出将所有年龄转换为整数,以防您稍后需要在代码中操作它们。

      【讨论】:

      • 你错过了他犯的一个严重错误......他覆盖了str
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      相关资源
      最近更新 更多