Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字典中查找值更改和索引_Python_List_Dictionary_Indexing_Intersection - Fatal编程技术网

Python 在字典中查找值更改和索引

Python 在字典中查找值更改和索引,python,list,dictionary,indexing,intersection,Python,List,Dictionary,Indexing,Intersection,我有一本大字典: exp_dict={0: {'length': 38.63999999999999, 'line_nm': [['Hammersmith & City_1'], ['Hammersmith & City_1'], ['Hammersmith & City_1'], ['Metropolitan_1', 'Hammersmith & City_1'], ['Metropolitan_1', 'Hammersmi

我有一本大字典:

exp_dict={0: {'length': 38.63999999999999,

  'line_nm': [['Hammersmith & City_1'],

   ['Hammersmith & City_1'],

   ['Hammersmith & City_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Metropolitan_1'],

   ['Metropolitan_1'],

   ['Metropolitan_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Metropolitan_1', 'Hammersmith & City_1'],

   ['Hammersmith & City_1'],

   ['Hammersmith & City_1'],

   ['Central', 'Hammersmith & City_1'],

   ['Central']]},
1:{'length':100,
   'line_nm':[
            ['Bakerloo'],
            ['Bakerloo'],
            ['Central'],
            ['Central'],
            ['Central'],
            ['Northern'],
            ['Northern'],
            ['Northern']

        ]

    }}
我想找出每个“直线”部分的值变化(交点)及其索引

例如,我想知道关于
dict['1']

线路改变了

['Metropolitan_1'] 
它与

dict['1']['line_nm'][0]

dict['1']['line_nm'][15]
这条线是
['Metropolitan\u 1']
,它与索引10中先前的
['Metropolitan\u 1']
没有交叉点

我需要知道所有的索引

目前我只能通过以下方式查看是否有任何变化:

for key,value in dict.items():
    if set(value['line_nm'][0]).intersection(*value['line_nm'])==set([]):
        print key,True

以下是一些想法:

  • 不要将
    dict
    用作变量名,因为它已作为内置项存在。使用
    dict.
    (或其他名称)
  • 在诸如“==”和“=”(一个很好的资源:)之类的操作符周围包含空格是更好的Python风格
  • 您可能会从您的用例中受益
下面的代码贪婪地遍历数据结构中的嵌套列表,并输出一个字典
d
,其中
d
的键是
dict
的键,
d
的值是元组列表。元组包含嵌套列表中列表值的索引,以及基于问题中概述的参数的列表值本身

d = {}

for k,v in dict_.items():
    d[k] = []
    ind = v['line_nm'][0]
    for i, j in enumerate(v['line_nm']):
        if not any(x in j for x in ind):            
            d[k].append((i, v['line_nm'][i]))
            ind = v['line_nm'][i]

print d

# output:
# {0: [(10, ['Metropolitan_1'])], 
#  1: [(5,  ['Metropolitan_1']), (10, ['Central', 'Hammersmith & City_1'])]}
编辑

上述代码为
exp\u dict
生成此输出:

# output:
# {0: [(10, ['Metropolitan_1']), 
#      (15, ['Hammersmith & City_1']), 
#      (18, ['Central'])], 
#  1: [(2,  ['Central']), 
#      (5,  ['Northern'])]}
如果只需要相关索引,请使用以下代码:

d = {}

for k,v in exp_dict.items():
    d[k] = []
    ind = v['line_nm'][0]
    for i, j in enumerate(v['line_nm']):
        if not any(x in j for x in ind): 
            d[k].append(i)
            ind = v['line_nm'][i]

print d

# which outputs the following for exp_dict:
# {0: [10, 15, 18], 
#  1: [2, 5]}

我很难理解你到底想做什么。是否要比较嵌套列表中元素的交点?对于每个嵌套字典,您是否只关心索引5与索引0的交集,以及索引10与索引5的交集?我想比较列表中的每个元素,找到第一个元素(比如索引=a)与列表[0]不交集,然后找到下一个元素与列表[index=a]不交集。谢谢,请重新阅读我的帖子?我做了一些更改,所以您的代码可能无法正常工作(它遗漏了与[0]具有相同行但与[15]不相同的15)。关键是,如果你沿着['line_nm']列表走,你必须换一个新名字,我想找出改变点的索引;感谢您的编辑-我已经编辑了我的答案,包括基于您新的
exp\u dict
的输出。很高兴能为您提供更多帮助。谢谢您的帮助~您能解释一下代码中的“ind”部分吗?它是如何工作的?如果出现任何新的变化(与以前的一个旧名称相同),这会起作用吗?抱歉问了这么多问题。我很高兴;很高兴解释,我只是邀请你去聊天室,这样我们可以继续聊天。不用担心问题。嗨,丹尼尔,我可能会错过邀请。如何开始聊天?
d = {}

for k,v in exp_dict.items():
    d[k] = []
    ind = v['line_nm'][0]
    for i, j in enumerate(v['line_nm']):
        if not any(x in j for x in ind): 
            d[k].append(i)
            ind = v['line_nm'][i]

print d

# which outputs the following for exp_dict:
# {0: [10, 15, 18], 
#  1: [2, 5]}