字典创建代码。这里最可能发生什么事?

时间:2019-07-11 17:04:12

标签: python

我正在看这段代码:

DICT_IDS = dict(x.split('::') 
                for x in object.method()        
                ['ids_comma_separated'].split(','))
DICT_ATTRS = dict(x.split('::') 
                  for x in object.method()                     
                  ['comma_separated_key_value_pairs'].split(','))

所以每个常量最终都将引用一个字典,但是构造函数内部发生了什么?

这首先发生吗?

x.split('::') 
for x in object.method()    

因此x必须是在::上分割的字符串吗?对吧?

编辑

哦....

 for x in object.method()       
 ['ids_comma_separated'].split(',')

首先执行。 x可能是我们使用ids_comma_separated输入的另一本词典,其值是一个字符串,需要像,这样在"cat,dog, mouse"上拆分成一个列表。所以x将成为一个列表?

1 个答案:

答案 0 :(得分:2)

它只是将这样的值解析为字典:

'ids_comma_separated': "somekey::somevalue,anotherkey::anothervalue"

从返回字典的方法(object.method()):

class object:
    def method():
        return {
            'ids_comma_separated': "somekey::somevalue,anotherkey::anothervalue"
        }

DICT_IDS = dict(x.split('::') 
                for x in object.method()        
                ['ids_comma_separated'].split(','))
DICT_IDS
# {'somekey': 'somevalue', 'anotherkey': 'anothervalue'}

dict()内部的部分是生成器理解,但是换行符使我们很难看到:

(x.split('::') for x in object.method()['ids_comma_separated'].split(','))

在每次迭代中,xsomekey::somevalue,它会再次分裂。