字典和列表中的不同排序顺序

时间:2016-03-23 08:36:52

标签: python-2.7 oracle11g


我必须从Oracle数据库中获取所有列名和类型,然后根据列类型执行不同的操作。

我的代码是:

for tab in table_list:
    tables = {}#tabel list
    table_types = {} #for each table dictionary column_name: type
    cur.execute("select column_name, data_type from all_tab_cols where owner = 'AAA' and table_name = '"+tab+"' and hidden_column = 'NO' order by column_id asc")
    res = cur.fetchall()
    for type in res:
        table_types[type[0]] = type[1]
    tables[tab]=table_types

    print res
    print table_types

对于res我得到:

[('COAG_ID', 'NUMBER'), ('COAG_CONT_ID', 'NUMBER'), ('COAG_CONT_OPER_ID', 'NUMBER'), ('COAG_CAGT_ID', 'NUMBER'), etc...

table_types我得到:

{'COAG_DELIVERY_PAYER': 'VARCHAR2', 'COAG_AGREEMENT_DATE': 'DATE', 'COAG_HANDSET_FULL_PRICE': 'NUMBER', etc...

我的问题是:为什么这些值的顺序不一样? table_types中的值直接来自res,为什么它们的顺序不同?

问候
的Pawel

1 个答案:

答案 0 :(得分:2)

table_types是字典,字典不会按照您插入的顺序存储或显示。

字典的顺序与它们在内部的工作方式以及它们在哈希表中的结束顺序有关。这又取决于密钥哈希值,它们的插入顺序以及您正在使用的Python实现。

顺序是任意的(但不是随机的),知道它将是哪个顺序永远不会有用。