2012-08-04 21 views
0

嗨我觉得这是一个简单的问题,但我不知道这行代码被称为所以其我很难寻找它:(希望你能帮助我!如何结合数组列表获取python?

对于上下文我是从在Django的FQL查询得到的数据和这个代码是在Views.py。我想知道是否有任何方式这三条线合并或简化这一点。谢谢!

edu = result[0]['education'] 
educa = edu[0]['school'] 
education = educa['name'] 
+0

'education = result [0] ['education'] [0] ['school'] ['name']'? – dmmd 2012-08-04 16:46:05

+0

非常感谢! – Jack 2012-08-04 16:48:55

+0

...你有没有注意到你已经结合了'e = result [0]'和'edu = e ['education']'? – 2012-08-04 20:41:11

回答

1

简单地替代引用对于最后一个表达式中的变量名称:

education = result[0]['education'][0]['school']['name'] 

不确定这是否更具可读性。

+0

谢谢你们!只是一个简短的问题这类请求代码的适当术语是什么?我想把它列入一个清单,使我的if语句更容易编写。如果有更好的方法,请让我知道。谢谢!此外,我会投票答复,当它让我:) – Jack 2012-08-04 16:47:44

+0

有没有特别的行话;我们只是将表达式链接在一起而不是使用中间变量。因此,不是将表达式的结果存储在变量中,而是将新的表达式应用于变量,我们将表达式直接应用于前一个表达式的结果。 – 2012-08-04 16:50:50

+2

真的没有一个“合适的术语”,因为它确实不像你认为的那么特别。也许你可以称之为“链接”。 'result [0]'和'result [0] ['education']'(你已经做了)和'result [0] ['education'] [0]'没有根本的概念上的区别。每个数组/键的访问表达式返回你访问的东西,然后你应用另一个数组/键访问该事物,等等。你可以永远做到这一点。 – 2012-08-04 16:55:24

0

Martijn是对的 - 我不确定可读性 - 如果你发现自己经常这样做,那么我会试图使用辅助函数......它使事情更清晰。

def get_education(edu, main_idx=0, edu_idx=0): 
    "Get the name of the school where education was received" 
    return edu[main_idx]['education'][edu_idx]['school']['name'] 

然后只需使用:

education = get_education(result) 
+1

这个函数是一个好主意,但是它保留在3行以防万一发生异常是很有用的,所以你可以看到_which_key/idx它抱怨 – 2012-08-04 17:01:37

+0

@gnibbler我完全同意。刚刚提出的功能,以便它应该访问的信息不那么混乱。虽然使用黑暗魔法来捕捉它失败的可能性......但是这比它的价值更加麻烦! – 2012-08-04 17:25:39

0

保持它的3条线。它非常易读,而且运行时间也不会太长。

当您试图追踪该块中的KeyErrorIndexError时,您会感谢我。

也许你可以改进变量名称。这是我的建议

education = result[0]['education'] 
school = education[0]['school'] 
school_name = school['name']