Skip to content

Commit 7512ac2

Browse files
authored
py: add 'keys' and 'values' methods to dict object
1 parent 8e99b32 commit 7512ac2

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

py/dict.go

+26
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,32 @@ func init() {
4141
return NewIterator(o), nil
4242
}, 0, "items() -> list of D's (key, value) pairs, as 2-tuples")
4343

44+
StringDictType.Dict["keys"] = MustNewMethod("keys", func(self Object, args Tuple) (Object, error) {
45+
err := UnpackTuple(args, nil, "keys", 0, 0)
46+
if err != nil {
47+
return nil, err
48+
}
49+
sMap := self.(StringDict)
50+
o := make([]Object, 0, len(sMap))
51+
for k := range sMap {
52+
o = append(o, String(k))
53+
}
54+
return NewIterator(o), nil
55+
}, 0, "keys() -> list of D's keys, as a list")
56+
57+
StringDictType.Dict["values"] = MustNewMethod("values", func(self Object, args Tuple) (Object, error) {
58+
err := UnpackTuple(args, nil, "values", 0, 0)
59+
if err != nil {
60+
return nil, err
61+
}
62+
sMap := self.(StringDict)
63+
o := make([]Object, 0, len(sMap))
64+
for _, v := range sMap {
65+
o = append(o, v)
66+
}
67+
return NewIterator(o), nil
68+
}, 0, "values() -> list of D's values, as a list")
69+
4470
StringDictType.Dict["get"] = MustNewMethod("get", func(self Object, args Tuple) (Object, error) {
4571
var length = len(args)
4672
switch {

py/tests/dict.py

+8
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@
2828
assert a.get('b',1) == 1
2929
assert a.get('b',True) == True
3030

31+
doc="check keys"
32+
a = {"a":1}
33+
assert list(a.keys()) == ["a"]
34+
35+
doc="check values"
36+
a = {"a":1}
37+
assert list(a.values()) == [1]
38+
3139
doc="check items"
3240
a = {"a":"b","c":5.5}
3341
for k, v in a.items():

0 commit comments

Comments
 (0)