Python论坛  - 讨论区

标题:[python-chinese] 想弄一个可顺序遍历的字典

2007年05月17日 星期四 20:57

ro rosettas在gmail.com
星期四 五月 17 20:57:39 HKT 2007

hi all

我需要做一个有list的可顺序写入,顺序遍历特点的参数+对应值的数据结构
根据c++的思维,我用了两个list,根据顺序使两个list中的值保持一一对应,并且封装了一些操作接口.

不过总觉得不够简洁,是否有更好的方法呢

-- 
with kind regards

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年05月17日 星期四 21:08

刘鑫 march.liu在gmail.com
星期四 五月 17 21:08:43 HKT 2007

ÖØÔØkeyµÄµü´ú½Ó¿Ú¾Í¿ÉÒÔÁË¡£

ÔÚ07-5-17£¬ro <rosettas在gmail.com> дµÀ£º
>
> hi all
>
> ÎÒÐèÒª×öÒ»¸öÓÐlistµÄ¿É˳ÐòдÈë,˳Ðò±éÀúÌصãµÄ²ÎÊý+¶ÔÓ¦ÖµµÄÊý¾Ý½á¹¹
> ¸ù¾Ýc++µÄ˼ά,ÎÒÓÃÁËÁ½¸ölist,¸ù¾Ý˳ÐòʹÁ½¸ölistÖеÄÖµ±£³ÖÒ»Ò»¶ÔÓ¦,²¢ÇÒ·â×°ÁËһЩ²Ù×÷½Ó¿Ú.
>
> ²»¹ý×ܾõµÃ²»¹»¼ò½à,ÊÇ·ñÓиüºÃµÄ·½·¨ÄØ
>
> --
> with kind regards
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese




-- 
µÇɽÕßÈ¥µÇɽ£¬ÒòΪɽÔÚÄÇÀï
ÎÒÔÚ˼¿¼£¬ÒòΪÎÊÌâÔÚÄÇÀï

ÁõöÎ
March.Liu
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070517/846ecde6/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年05月17日 星期四 21:15

ro rosettas在gmail.com
星期四 五月 17 21:15:48 HKT 2007

On 5/17/07, 刘鑫 <march.liu在gmail.com> wrote:
> 重载key的迭代接口就可以了。
>
不大明白

-- 
with kind regards

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年05月17日 星期四 21:41

黄毅 yi.codeplayer在gmail.com
星期四 五月 17 21:41:06 HKT 2007

On 5/17/07, ro <rosettas at gmail.com> wrote:
>
> hi all
>
> 我需要做一个有list的可顺序写入,顺序遍历特点的参数+对应值的数据结构
> 根据c++的思维,我用了两个list,根据顺序使两个list中的值保持一一对应,并且封装了一些操作接口.
>
> 不过总觉得不够简洁,是否有更好的方法呢


怀疑你所要的就是一个 OrderedDict。

顺手写个两个实现,后面那个类似你用的方法,用两个列表:

class OrderedDict(dict):
    '''
    >>> d = dict()
    >>> d['a']=1
    >>> d['b']=2
    >>> d['c']=3
    >>> d.items()
    [('a', 1), ('c', 3), ('b', 2)]
    >>> d = OrderedDict()
    >>> d['a'] = 1
    >>> d['b'] = 2
    >>> d['c'] = 3
    >>> list(d.items())
    [('a', 1), ('b', 2), ('c', 3)]
    '''
    def __init__(self, *args, **kw):
        super(OrderedDict, self).__init__(*args, **kw)
        self.ordered_keys = self.keys()

    def __setitem__(self, key, value):
        if not key in self:
            self.ordered_keys.append(key)
        super(OrderedDict, self).__setitem__(key, value)

    def items(self):
        for key in self.ordered_keys:
            yield key, self[key]

class DoubleList(object):
    '''
    >>> d = dict()
    >>> d['a']=1
    >>> d['b']=2
    >>> d['c']=3
    >>> d.items()
    [('a', 1), ('c', 3), ('b', 2)]
    >>> d = DoubleList()
    >>> d['a'] = 1
    >>> d['b'] = 2
    >>> d['c'] = 3
    >>> list(d.items())
    [('a', 1), ('b', 2), ('c', 3)]
    '''
    def __init__(self):
        self.keys = []
        self.values = []

    def __setitem__(self, key, value):
        if not key in self.keys:
            self.keys.append(key)
            self.values.append(value)
        else:
            index = self.keys.find(key)
            self.values[index]=value

    def __getitem__(self, key):
        index = self.keys.find(key)
        return self.values[index]

    def items(self):
        for i in range(len(self.keys)):
            yield self.keys[i], self.values[i]

if __name__ == '__main__':
    import doctest
    doctest.testmod()

-- 
http://codeplayer.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20070517/e2b74d32/attachment-0001.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年05月18日 星期五 08:25

ro rosettas在gmail.com
星期五 五月 18 08:25:37 HKT 2007

On 5/17/07, 黄毅 <yi.codeplayer在gmail.com> wrote:
> On 5/17/07, ro <rosettas在gmail.com> wrote:
> > hi all
> >
> > 我需要做一个有list的可顺序写入,顺序遍历特点的参数+对应值的数据结构
> > 根据c++的思维,我用了两个list,根据顺序使两个list中的值保持一一对应,并且封装了一些操作接口.
> >
> > 不过总觉得不够简洁,是否有更好的方法呢
>
> 怀疑你所要的就是一个 OrderedDict。
>
> 顺手写个两个实现,后面那个类似你用的方法,用两个列表:
>

谢谢,是这个意思,第一个实现看起来比我的好一些

-- 
with kind regards

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年05月18日 星期五 10:34

limodou limodou在gmail.com
星期五 五月 18 10:34:19 HKT 2007

On 5/18/07, ro <rosettas在gmail.com> wrote:
> On 5/17/07, 黄毅 <yi.codeplayer在gmail.com> wrote:
> > On 5/17/07, ro <rosettas在gmail.com> wrote:
> > > hi all
> > >
> > > 我需要做一个有list的可顺序写入,顺序遍历特点的参数+对应值的数据结构
> > > 根据c++的思维,我用了两个list,根据顺序使两个list中的值保持一一对应,并且封装了一些操作接口.
> > >
> > > 不过总觉得不够简洁,是否有更好的方法呢
> >
> > 怀疑你所要的就是一个 OrderedDict。
> >
> > 顺手写个两个实现,后面那个类似你用的方法,用两个列表:
> >
>
> 谢谢,是这个意思,第一个实现看起来比我的好一些
>
cookbook还有其它的一些包,象django中就有这样的模块,可以找一找。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年05月18日 星期五 11:03

黄毅 yi.codeplayer在gmail.com
星期五 五月 18 11:03:33 HKT 2007

这里有一个现成的:
http://code.djangoproject.com/browser/django/trunk/django/utils/datastructures.py#L53

-- 
http://codeplayer.blogspot.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20070518/d92be7de/attachment.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号