2016-04-11 57 views
-6

你好,我似乎无法得到这个工作,我有一个列表Python的附加变量列表

a = [{'Name': 150,'number': 100},{'Name': 190, 'number': 200},{'Name': 190, 'number': 300}] 

我需要追加一些变数,但我不断收到错误

a.append ({'Name': + Name + ',' + 'number'+ ':' + Number}) 
TypeError: bad operand type for unary +: 'str' 

的完整代码:

a = [{'Name': 150,'number': 100},{'Name': 190, 'number': 200},{'Name': 190, 'number': 300}] 
    Name = '150' 
    number = '10' 

    a.append ({'Name': + Name + ',' + 'number'+ ':' + Number}) 


    def get_number(name): 
      return lambda x: x['number'] if x['Name']==name else 0 

    names = sorted(set(map(lambda x: x['Name'], a))) 
    result = [{'Name':name,'number':sum(map(get_number(name), a))} for name in names] 

    string = str(result) 
    remove = "[{}],'" 
    for i in range (0,len(remove)): 
      string =string.replace(remove[i],"") 
    b = string 

    print b 

如何将数据追加到此列表中?

+2

为什么要将列表转换为字符串,然后使用字符串操作删除项目? – ThiefMaster

+0

Im转换为al列表,因为我得到的名字和数字。相同的名称需要添加,所以我可以看到名称的总和,然后将其添加到一个XML元素 – user2433624

回答

2

您正在尝试追加字典。这应该工作:

a.append({'Name': Name, 'number' : Number}) 

写给你们采用的样式采用了一些非常可爱的直觉,但是这不是这是如何工作:)字典会自动在其他的都布局方式格式化自己,你只需要为他们提供正确的键和值。

您得到错误的原因是因为您放在前面的:。这告诉Python你正在使用一本字典 - 但是之后你立即使用了一个+。现在Python向右看,看到一个字符串,认为“好吧,你正试图向对方添加两个字符串”,向左看,看到的不是字符串。 Python很困惑:它需要一些可以解释为左边字符串的东西,否则这是行不通的。所以它会抛出一个错误。

编辑:关于一元运算符的更正,请参阅@PM 2Ring的注释!

+1

“向左看,看到不是字符串的冒号”。不是。解析器已经处理了冒号,现在它正在寻找一个有效的表达式来构建一个与“Name”键相关联的值。它不会尝试将“+”解释为求和操作符(其中字符串意味着字符串连接),它将其解释为[一元正向](https://en.wikipedia.org/wiki/Unary_operation#Unary_negative_and_positive)运算符(如错误消息所述),但该运算符没有为字符串定义。 –

+1

(续)一元正数_is_定义为数字,所以我们可以做'a = + 5'和'a = + b',其中'b'是一个数字。确实,这是非常无用的,但它与'a = -b'对称,并且构建解析器中处理一元正数的代价很低。 :) –

1

你不需要在这里使用+:你可以把变量值的键后,像你这样当你第一次宣布a值:

a.append ({'Name': Name, 'number': Number}) 

+是用于连接字符串或增加数字,但在这里我们试图创建一个字典。做到这一点的格式是:

{"Key": value, "Another Key": value, ...} 

+迹象并不需要,因为你不是加入什么,你只是创建使用字典Python的内置语法。

+0

感谢您的解释,这帮助了我很多。 – user2433624

0

在你的代码中,错误是显而易见的,TypeError也清楚地告诉你错误在哪里。你不需要在声明中使用'+'。只需编辑代码如下所示:

a.append({“名称”:名称,“数字”:数})

的“+”是用来追加字符串和你的情况你是将一个变量赋值给一个值。希望能帮助到你。 :)