2016-01-22 52 views
2

我是新来的数据结构在Python中,并想知道你如何模拟像Python中的指针这样的事情,以便多个结构可以引用和管理相同的一块数据。Python:如何创建一个列表和字典之间的公共元素

我有以下两种结构

my_list = [1] 
my_dictionary = {} 
my_dictionary["hello"] = my_list[0] 

当我做下面我得到真正的

id(my_dictionary["hello"]) == my_list[0] 

但是我怎么能强迫无论是从字典和一气呵成的名单中除名? 如果我下面my_dictionary仍具有参考my_list [0],即1

del my_list[0] 

有摆脱既一气呵成这些元素的一种方式?什么是做这样的链接结构的python方式?

+0

'del my_list [0]; del my_dictionary [“hello”]'? – KSFT

+0

但这意味着它们没有链接,因此重复了努力......如果我忘记从一个结构中删除该元素而不是从另一个结构中删除该元素,该怎么办?似乎容易出错 – Har

+0

你不能通过从列表中删除一个元素来删除字典中的一个键(不做非常复杂的事情)。它们是两个不同的对象,调用一个方法不会改变另一个。 – KSFT

回答

2

这真的取决于你试图通过交叉引用解决的问题。


假设您的意图是能够有效地通过键找到一个项目,以及按顺序依次迭代。在这种情况下,不管语言如何,您可能都希望避免交叉引用散列表和数组数据结构,因为更新本质上是线性的。相反,交叉引用一个散列表和一个列表可能更有意义。

对于这一点,你可以使用类似llist

d = {} 
l = llist.dllist() 

# insert 'foo' and obtain the link 
lnk = l.append('foo') 
# insert the link to the dictionary 
d['foo'] = lnk 

相反,假设你的意图是为了能够有效地都由键找到项目,以及通过索引来定位。然后你可以使用一个字典和一个列表,并重新编辑该字典的每个修改列表。幻想交叉引用没有真正的理由。

0

简而言之,没有办法轻松链接你的两个结构。

您可以操纵指向的对象,以便它具有一些“已删除”状态,并且会像删除它(同时位于两个容器中一样)。

但是,如果您想要的只是dictlist,请使用list(the_dict.values())

如果一切都失败了,你可以让一个类来实现这一点。请参阅https://docs.python.org/2/reference/datamodel.html#emulating-container-types了解您的班级必须具备的详细信息。在课堂上,你会有“重复的努力”,但如果它被正确实施,它不会容易出错。

-1

你总是可以做这样的事情:

Pointers in Python?

(快速计算器搜索显示了一定的成果)

是与不仅仅是数据结构更搞乱。 请记住,Python为你管理内存(在大多数情况下,非常好),所以你不必担心自己清理。

-1

我已经尝试了下面的代码,它的工作原理(改变其中一个DataStructure的变化)。 对此有帮助吗?

list1 = [1,2,3] 
list2 = [4,5,6] 

my_dictionary = {} 
my_dictionary["a"] = list1 
my_dictionary["b"] = list2 

del list1[0] 
print list1 
print list2 
print my_dictionary 
相关问题