Skip to content

Commit

Permalink
py: add 'keys' and 'values' methods to dict object
Browse files Browse the repository at this point in the history
  • Loading branch information
kellrott authored Jan 9, 2023
1 parent 8e99b32 commit 7512ac2
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
26 changes: 26 additions & 0 deletions py/dict.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,32 @@ func init() {
return NewIterator(o), nil
}, 0, "items() -> list of D's (key, value) pairs, as 2-tuples")

StringDictType.Dict["keys"] = MustNewMethod("keys", func(self Object, args Tuple) (Object, error) {
err := UnpackTuple(args, nil, "keys", 0, 0)
if err != nil {
return nil, err
}
sMap := self.(StringDict)
o := make([]Object, 0, len(sMap))
for k := range sMap {
o = append(o, String(k))
}
return NewIterator(o), nil
}, 0, "keys() -> list of D's keys, as a list")

StringDictType.Dict["values"] = MustNewMethod("values", func(self Object, args Tuple) (Object, error) {
err := UnpackTuple(args, nil, "values", 0, 0)
if err != nil {
return nil, err
}
sMap := self.(StringDict)
o := make([]Object, 0, len(sMap))
for _, v := range sMap {
o = append(o, v)
}
return NewIterator(o), nil
}, 0, "values() -> list of D's values, as a list")

StringDictType.Dict["get"] = MustNewMethod("get", func(self Object, args Tuple) (Object, error) {
var length = len(args)
switch {
Expand Down
8 changes: 8 additions & 0 deletions py/tests/dict.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,14 @@
assert a.get('b',1) == 1
assert a.get('b',True) == True

doc="check keys"
a = {"a":1}
assert list(a.keys()) == ["a"]

doc="check values"
a = {"a":1}
assert list(a.values()) == [1]

doc="check items"
a = {"a":"b","c":5.5}
for k, v in a.items():
Expand Down

0 comments on commit 7512ac2

Please sign in to comment.